Registriert seit: 13. Mai 2011
11 Beiträge
|
AW: Bei Programstart Adminrechte einholen?
26. Jul 2011, 11:01
Du darfst jetzt netterweise noch eine Exe mitliefern:
Delphi-Quellcode:
program GanzTollesStartProgramm;
uses
Windows,
sysutils,
ShellAPI;
const
EchseName = 'DirSync.exe';
SEE_MASK_NOCLOSEPROCESS = $00000040;
function Run(aFile, Params: string; const ShowCmd: DWORD; const AsAdmin: Boolean): Boolean;
var
ShExecInfoA: SHELLEXECUTEINFOA;
begin
Result := false;
if (aFile = '') or not FileExists(aFile) then
Exit;
ShExecInfoA.Wnd := GetForegroundWindow;
ShExecInfoA.cbSize := SizeOf(SHELLEXECUTEINFOA);
ShExecInfoA.fMask := SEE_MASK_NOCLOSEPROCESS;
if AsAdmin then
ShExecInfoA.lpVerb := 'runas'
else
ShExecInfoA.lpVerb := 'open';
ShExecInfoA.lpFile := PAnsiChar(AnsiString(aFile));
ShExecInfoA.lpParameters := PAnsiChar(AnsiString(Params));
ShExecInfoA.lpDirectory := PAnsiChar(AnsiString(ExtractFileDir(aFile)));
ShExecInfoA.nShow := ShowCmd;
Result := ShellExecuteExA(@ShExecInfoA);
CloseHandle(ShExecInfoA.hProcess);
end;
var
Params, OrigEchse: string;
i: Integer;
begin
OrigEchse := IncludeTrailingPathDelimiter(ExtractFileDir(ParamStr(0)))+EchseName;
Params := '';
for i := 1 to ParamCount do
Params := Params + ' ' + ParamStr(i);
Delete(Params, 1, 1);
case MessageBox(0, 'Soll '+EchseName+' mit Adminrechten gestartet werden?', 'Adminrechte?', MB_ICONQUESTION or MB_YESNOCANCEL or MB_DEFBUTTON1) of
idYes: Run(OrigEchse, Params, SW_SHOWNORMAL, true);
idNo: Run(OrigEchse, Params, SW_SHOWNORMAL, false);
idCancel: MessageBox(0, 'Keine Sorge, bei dem ganzen Rechtekauderwelsch weiß keiner mehr was er will, geschweige denn was Richtig wäre. -,,,-', '', MB_ICONERROR or MB_OK or MB_DEFBUTTON1);
end;
end.
Oder tricksen und sich selbst neustarten.
Nur Vorsicht, vieles funzt immernoch nicht, zB mit einem Adminprozess einen 'normalen' Prozess starten....
|
|
Zitat
|