![]() |
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? |
AW: Anderes Programm mit Administratorrechten aufrufen
Hallo
wie rufst Du das andere Programm denn auf? |
AW: Anderes Programm mit Administratorrechten aufrufen
Ah, gute Frage. Das habe ich vergessen zu schreiben.
Delphi-Quellcode:
Und WinExec ist wohl diese:
var SA:Ansistring;
begin SA:=...; Result := WinExec(PAnsiChar(SA),sw_Show); end;
Delphi-Quellcode:
function WinExec; external kernel32 name 'WinExec';
|
AW: Anderes Programm mit Administratorrechten aufrufen
WinExec ist noch ein Überbleibsel aus Windows 2.x von vor rund 30 Jahren! Das sollte man
![]() Du kannst z.B. ShellExecute ggf. mit dem Verb runas verwenden, CreateProcess ginge ebenfalls. |
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. |
AW: Anderes Programm mit Administratorrechten aufrufen
Zitat:
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:
|
AW: Anderes Programm mit Administratorrechten aufrufen
ein zweites Mal?
:o :shock: :roll: :idea: :-D :mrgreen: :dp: Danke :thumb: |
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"? |
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 ![]() sowie ![]() ![]() |
AW: Anderes Programm mit Administratorrechten aufrufen
Zitat:
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 22:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz