Einzelnen Beitrag anzeigen

Benutzerbild von nh.
nh.

Registriert seit: 13. Mai 2011
11 Beiträge
 
#2

AW: Bei Programstart Adminrechte einholen?

  Alt 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....
  Mit Zitat antworten Zitat