Per Commandline Aufruf sollte das möglich sein, hier ein Batch Auszug:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
Hallo KodeZwerg,
vielen Dank für deinen genialen Gedanken!
Leider funktioniert es nicht so, wie ich es mir gewünscht habe.
Also, ich habe eine Batch-Datei "test.bat" mit diesem Inhalt erstellt:
Code:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" F:\delphi\_test\StartUnelevatedProgramFromElevatedProgram\
Win32\Debug\StartUnelevatedProgramFromElevatedProgram.exe"
Wenn ich diese Batch-Datei doppelklicke, wird wie gewünscht mein Programm gestartet. So weit so gut.
Nun versuche ich mal, das Ganze von meinem elevated Programm aus zu starten:
Delphi-Quellcode:
procedure TForm3.btnRestartNotElevatedClick(Sender: TObject);
begin
JclShell.ShellExecEx('
F:\delphi\_test\StartUnelevatedProgramFromElevatedProgram\Win32\Debug\test.bat');
Close;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
// wer MiTeC nicht hat, einfach einen anderen Code verwenden oder auskommentieren:
if MiTeC_Routines.IsElevated
then
Self.Caption := '
Elevated'
else
Self.Caption := '
NOT Elevated';
end;
Ich starte also meine App mit höheren Rechten: KontextMenü im Windows-Explorer -> "Run as Administrator". Nach dem
UAC prompt started dann die App elevated.
Dann klicke ich auf den Button: Das Programm startet die Batch-Datei, schließt sich selbst, und die App wird neu gestartet. Aber leider wieder elevated!
Im Anhang ist der Source-Code:
StartUnelevatedProgramFromElevatedProgram.zip