![]() |
Bei Programstart Adminrechte einholen?
Tag allerseits.
Was mich mal interressieren würde: Wenn eine Setup gestartet wird, popt oft das UAC fenster auf mit der Frage ob ich es dem programm gestatten soll änderungen durchzuführen. Wenn ich mich recht erinnere gab es auch mal einen Dialog vonwegen "Dieses Programm benötigt Adminrechte" (Glaube das war JavaUpdaten) Wie kann ich so einen Dialog aufrufen, über den der User dem Programm solche rechte geben kann? Es ist nunmal etwas "umständlich" immer zu sagen "muss mit adminrechten gestartet werden", was der User manuel durchführen muss. Schöner wäre es halt wen der User beim start ne Meldung bekommen würde, über die er die rechte zulassen kann. Gibts da ne möglichkeit? MFG Memnarch |
AW: Bei Programstart Adminrechte einholen?
Du darfst jetzt netterweise noch eine Exe mitliefern:
Delphi-Quellcode:
Oder tricksen und sich selbst neustarten.
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. Nur Vorsicht, vieles funzt immernoch nicht, zB mit einem Adminprozess einen 'normalen' Prozess starten.... :roll::roll::roll::roll: |
AW: Bei Programstart Adminrechte einholen?
Moment... du startest ein normales programm, dass dan ein anderes als admin startet?
Bin mir nicht sicher ob das funktioniert. Hab irgendwo was vonnem app.manifest gelesen. Aber diesbezüglich noch nicht schlauer geworden. MFG Memnarch |
AW: Bei Programstart Adminrechte einholen?
Jo, genau so.
Lass das undynamische Manifestinterpretationsgedöns weg, will eh keiner. |
AW: Bei Programstart Adminrechte einholen?
Irgendwie vermisse ich gerade den "Daumen runter" Button...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 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-2025 by Thomas Breitkreuz