Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   CreateProcess: Prozess mit Administratorrechten? (https://www.delphipraxis.net/196238-createprocess-prozess-mit-administratorrechten.html)

PeterPanino 3. Mai 2018 19:46

CreateProcess: Prozess mit Administratorrechten?
 
Einen schönen guten Tag!

Ich verwende folgenden Code, um ein Programm mit einer gegebenen CommandLine zu starten:

Code:
  var
    si: TStartupInfo;
    pi: TProcessInformation;

  ZeroMemory(@si, sizeof(si));
  si.cb := sizeof(si);
  si.dwFlags := STARTF_USESHOWWINDOW;
  si.wShowWindow := WindowMode;

  if Winapi.Windows.CreateProcess(nil, PChar(cmdLine), nil, nil, False, 0, nil, nil, si, pi) then
  begin
    Winapi.Windows.CloseHandle(pi.hThread);
    Winapi.Windows.CloseHandle(pi.hProcess);
    Exit;
  end;
Welche Parameter muss ich nun wie verändern, um das Programm mit Administrator-Rechten auszuführen?

Luckie 3. Mai 2018 20:32

AW: CreateProcess: Prozess mit Administratorrechten?
 
Forensuche?

https://www.delphipraxis.net/34019-c...essasuser.html

PeterPanino 3. Mai 2018 20:59

AW: CreateProcess: Prozess mit Administratorrechten?
 
Zitat:

Zitat von Luckie (Beitrag 1401238)

Hab ich bereits probiert, dieses Beispiel funktioniert nicht, wenn ich sinfo so definiere wie in dem Beispiel.

PeterPanino 3. Mai 2018 22:09

AW: CreateProcess: Prozess mit Administratorrechten?
 
Ich habe das Problem jetzt so (auf brutale Weise) gelöst:

Code:
var
  ThisProgramToRun, ThisParamToRun: string;
  p: Integer;

if chkAdminMode.Checked then
begin
  cmdline := Trim(cmdline);

  if ContainsText(cmdline, ' ') then // wenn cmdline ein Leerzeichen enthält
  begin
    p := Pos(' ', cmdline);
    ThisProgramToRun := JclStrings.StrLeft(cmdline, p - 1);
    ThisParamToRun := Trim(JclStrings.StrRestOf(cmdline, p + 1));
  end
  else // wenn cmdline kein Leerzeichen enthält
  begin
    ThisProgramToRun := cmdline;
    ThisParamToRun := '';
  end;

  JclShell.ShellExecEx(ThisProgramToRun, ThisParamToRun, 'runas');
  EXIT;
end
Funktioniert wunderbar!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz