AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Anderes Programm mit Administratorrechten aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Anderes Programm mit Administratorrechten aufrufen

Ein Thema von freimatz · begonnen am 10. Nov 2020 · letzter Beitrag vom 20. Nov 2020
Antwort Antwort
Seite 1 von 2  1 2      
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#1

Anderes Programm mit Administratorrechten aufrufen

  Alt 10. Nov 2020, 07:25
Hallo,
mein Hauptprogramm ruft ab und zu beim Programmende ein anderes Programm auf. Das ging bisher ganz gut. Num melden Tester dass das nichtmehr funktioniert. Meine Vermutung ist, dass es daran liegt, dass das "andere Programm" nun Administratorrechte verlangt. Das habe ich simpel bei den Projektoptionen bei Application eingestellt ("Enable Administrator Privileges"). Wenn ich mein Hauptprogramm debugge mache ich das in Delphi, das ich selbst mit Administratorrechten gestartet habe.
Bevor ich mich nun in umfangreiche Analysen stürze, kann mir jemand ad hoc sagen, was man beachten muss, wenn man ein anderes Programm mit Administratorrechten aufrufen will?

Geändert von freimatz (10. Nov 2020 um 07:41 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 10. Nov 2020, 07:39
Hallo
wie rufst Du das andere Programm denn auf?
Heiko
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 10. Nov 2020, 07:55
Ah, gute Frage. Das habe ich vergessen zu schreiben.
Delphi-Quellcode:
var SA:Ansistring;
begin
   SA:=...;
   Result := WinExec(PAnsiChar(SA),sw_Show);
end;
Und WinExec ist wohl diese:
function WinExec; external kernel32 name 'WinExec';
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 10. Nov 2020, 08:22
WinExec ist noch ein Überbleibsel aus Windows 2.x von vor rund 30 Jahren! Das sollte man keinesfalls mehr nutzen.

Du kannst z.B. ShellExecute ggf. mit dem Verb runas verwenden, CreateProcess ginge ebenfalls.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 11. Nov 2020, 08:01
Hallo,
Danke für die Hinweise. Ich habe mich ein bischen eingelesen. Ich habe eine Lösung die bei neuen Versionen des Hauptprogramms funktioniert (zumindest bei mir).
Warum empfiehlst Du und viele andere ShellExecute? In deinem Link steht doch "Applications should use the CreateProcess function."

Auch ist mir immer noch nicht klar warum das Programm ohne "runas" nicht startet.
Überdies ist mir nun klar, dass es keine ausreichende Lösung ist wenn ich das jetzt ändere. Wenn z.B. jemand noch eine ältere Ausgabe des Hauptprogramms hats (das noch WinExec verwendet) so kann er das neue "andere Programm" immer noch nicht starten. (Das "andere Programm" ist ein Updater.)

Bleibe dann nicht nur das "andere Programm" nicht als Administrator laufen zu lassen sondern normal? So können alte Programme das noch staren. Dafür müsste dann das "andere Programm" dann ein weiteres Programm mit Administatorrechten starten dass dann tut was man nur mit Administatorrechten tun kann.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 11. Nov 2020, 11:53
Warum empfiehlst Du und viele andere ShellExecute? In deinem Link steht doch "Applications should use the CreateProcess function."
Ganz einfach: ShellExecute ist einfacher.
CreateProcess ist die deutlich mächtigere Funktion, aber als Ersatz für WinExec ist ShellExecute einfach mal schnell ersetzt, CreateProcess braucht ein wenig mehr Code.

Bleibe dann nicht nur das "andere Programm" nicht als Administrator laufen zu lassen sondern normal? So können alte Programme das noch staren. Dafür müsste dann das "andere Programm" dann ein weiteres Programm mit Administatorrechten starten dass dann tut was man nur mit Administatorrechten tun kann.
Es kann sich auch selbst ein zweites Mal mit Adminrechten starten und die erste Instanz bei fehlenden Rechten mit einer Meldung gleich wieder beenden. So nach dem Motto: Es werden Adminrechte benötigt! [Ok][Cancel].
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 11. Nov 2020, 13:40
ein zweites Mal?


Danke
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 13. Nov 2020, 11:56
So, das scheint auch bei den Testern zu funktionieren.
Allerings etwas anderes nicht und das führt mich zur gegenteiligen Frage:

Nun läuft mein Programm mit Administratorrechten. Wie kann ich daraus nun ein anderes Programm aufrufen, das ohne Administratorrechte läuft. Gibt es das Gegenteil zu "runas"?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.052 Beiträge
 
Delphi 12 Athens
 
#9

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 13. Nov 2020, 13:22
bezüglich ShellExecute mit lpOperation
siehe HKEY_CLASSES_ROOT\.exe -> HKEY_CLASSES_ROOT\exefile

und da findet man dann nicht nur HKEY_CLASSES_ROOT\exefile\shell\runas, sondern auch \runasuser



ansonsten gibt es auch noch die runas.exe,
sowie MSDN-Library durchsuchenCreateProcessAsUser, MSDN-Library durchsuchenCreateProcessWithLogon usw.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Nov 2020 um 13:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Anderes Programm mit Administratorrechten aufrufen

  Alt 13. Nov 2020, 15:36
Nun läuft mein Programm mit Administratorrechten. Wie kann ich daraus nun ein anderes Programm aufrufen, das ohne Administratorrechte läuft. Gibt es das Gegenteil zu "runas"?
Das Problem ist ja, dass auch mehrere Benutzer angemeldet sein können, das heißt du müsstest ja auch noch herausfinden in welchem Benutzerkontext du das Programm ausführen möchtest.

Irgendwie klingt das wie ein Updatetool, kann das sein? Für ein solches Tool habe ich das so gelöst, dass ich ein Programm im ursprünglichen Kontext habe weiter laufen lassen und dann von dort aus das aktualisierte Programm gestartet habe.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz