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/)
-   -   Delphi CreateProcessWithLogonW Aufruf mit Übergabeparameter (https://www.delphipraxis.net/138164-createprocesswithlogonw-aufruf-mit-uebergabeparameter.html)

Fisti 4. Aug 2009 15:34


CreateProcessWithLogonW Aufruf mit Übergabeparameter
 
Hallo zusammen

Ich habe ein Problem mit dem CreateProcessWithLogonW Aufruf.

Mein Code sieht folgendermassen aus:

Delphi-Quellcode:
function CreateProcessWithLogonW(
  lpUsername,
  lpDomain,
  lpPassword:PWideChar;
  dwLogonFlags:dword;
  lpApplicationName: PWideChar;
  lpCommandLine: PWideChar;
  dwCreationFlags: DWORD;
  lpEnvironment: Pointer;
  lpCurrentDirectory: PWideChar;
  const lpStartupInfo: tSTARTUPINFO;
  var lpProcessInformation: TProcessInformation): BOOL; stdcall; external 'advapi32.dll';


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  //Variante 1
  cFileName = 'C:\WINDOWS\NOTEPAD.EXE';
  //Variante 2
  cFileName = 'C:\WINDOWS\NOTEPAD.EXE "C:\Temp\test.txt"';
var
  _StartupInfo : TStartupInfo;
  _ProcessInfo : TProcessInformation;
  _lwResult   : Longword;
  _WaitResult : integer;
begin

      //-- set application appearance ---
      FillChar(_StartupInfo, SizeOf(_StartupInfo), #0);
      _StartupInfo.cb         := SizeOf(StartupInfo);
      _StartupInfo.dwFlags    := STARTF_USESHOWWINDOW;
      _StartupInfo.wShowWindow := 1;

      //--- create application ---
      if not CreateProcessWithLogonW( 'User'
                                      'Domain',
                                      'Password',
                                      0,
                                      cFileName,
                                      nil,
                                      CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                                      nil,
                                      nil,
                                      _StartupInfo,
                                      _ProcessInfo)
      then begin
        _lwResult := WAIT_FAILED;
        ShowMessageFmt( 'Create Process failed <%s>', [cFileName]);
        exit;
      end;

      _WaitResult := WaitForSingleObject(_ProcessInfo.hProcess, INFINITE);
      ....
end;
Variante 1 funktioniert problemlos. Die Variante 2 mit dem Übergabeparameter funktioniert aber leider nicht.

Kann mir jemand sagen, was ich falsch mache?

Danke schon im Voraus.

Gruess Fisti

DeddyH 4. Aug 2009 16:16

Re: CreateProcessWithLogonW Aufruf mit Übergabeparameter
 
Versuch es mal im lpCommandLine-Parameter statt in lpApplicationName.

MichaM 4. Aug 2009 16:26

Re: CreateProcessWithLogonW Aufruf mit Übergabeparameter
 
Wie in MSDN beschrieben gibt es zwei Varianten des Aufrufs:

1.
lpApplicationName: "Der Name des Programms"
lpCommandLine: "Die Parameter"

2.
lpApplicationName: NIL
lpCommandLine: "Der Name des Programms" + "Die Parameter".

Siehe auch bei Michael Puff.

Gruss MichaM

Fisti 5. Aug 2009 07:23

Re: CreateProcessWithLogonW Aufruf mit Übergabeparameter
 
Danke für die schnelle Antwort, hat prima geklappt :-D :-D

Gruss Fisti


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 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