Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Anderes Programm mit Administratorrechten aufrufen (https://www.delphipraxis.net/206012-anderes-programm-mit-administratorrechten-aufrufen.html)

freimatz 10. Nov 2020 06:25

Anderes Programm mit Administratorrechten aufrufen
 
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?

hoika 10. Nov 2020 06:39

AW: Anderes Programm mit Administratorrechten aufrufen
 
Hallo
wie rufst Du das andere Programm denn auf?

freimatz 10. Nov 2020 06:55

AW: Anderes Programm mit Administratorrechten aufrufen
 
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:
Delphi-Quellcode:
function WinExec; external kernel32 name 'WinExec';

jaenicke 10. Nov 2020 07:22

AW: Anderes Programm mit Administratorrechten aufrufen
 
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.

freimatz 11. Nov 2020 07:01

AW: Anderes Programm mit Administratorrechten aufrufen
 
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). :thumb:
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.

jaenicke 11. Nov 2020 10:53

AW: Anderes Programm mit Administratorrechten aufrufen
 
Zitat:

Zitat von freimatz (Beitrag 1477085)
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.

Zitat:

Zitat von freimatz (Beitrag 1477085)
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].

freimatz 11. Nov 2020 12:40

AW: Anderes Programm mit Administratorrechten aufrufen
 
ein zweites Mal?
:o :shock: :roll: :idea: :-D :mrgreen:

:dp: Danke :thumb:

freimatz 13. Nov 2020 10:56

AW: Anderes Programm mit Administratorrechten aufrufen
 
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"?

himitsu 13. Nov 2020 12:22

AW: Anderes Programm mit Administratorrechten aufrufen
 
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.

jaenicke 13. Nov 2020 14:36

AW: Anderes Programm mit Administratorrechten aufrufen
 
Zitat:

Zitat von freimatz (Beitrag 1477263)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr.
Seite 1 von 2  1 2      

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