Hallo,
das "Warten" funktioniert bei mir mit der folgenden Funktion mit allen Betriebssystemen einwandfrei:
Delphi-Quellcode:
function RuWin_ShellExec(aHandle: HWND; FileName, Parameters, Directory: string;
ShowCmd: Integer; AsAdmin, Wait: boolean): Boolean;
var
SEI: TShellExecuteInfo;
begin
FillChar(SEI, SizeOf(SEI), #0);
SEI.cbSize := SizeOf(SEI);
SEI.Wnd := aHandle;
SEI.fMask := SEE_MASK_NOCLOSEPROCESS;
{-Bis zu XP "AsAdmin" automatisch ignorieren-}
if RunningWinVer <= WinXPProf then AsAdmin := false;
if AsAdmin
then SEI.lpVerb := 'runas'
else SEI.lpVerb := 'open';
SEI.lpFile := PChar(FileName);
SEI.lpParameters := PChar(Parameters);
SEI.lpDirectory := PChar(Directory);
SEI.nShow := ShowCmd;
Result := ShellExecuteEx(@SEI);
if Result then
if Wait then begin
if SEI.hProcess > 32 then begin
WaitForInputIdle(SEI.hProcess, INFINITE);
WaitForSingleObject(SEI.hProcess, INFINITE);
end;
end;
CloseHandle(SEI.hProcess);
end;
Das einzige Problem, was mit dem "Warten" eigentlich nichts zu tun hat, ist dieser blöde User-Dialog unter XP wenn man "runas" verwendet, der dummerweise noch eine Checkbox beinhaltet die voreingestellt mit verminderten Rechten ausführt. Darum die
OS-Prüfung
Code:
if RunningWinVer <= WinXPProf