Registriert seit: 14. Nov 2005
561 Beiträge
RAD-Studio 2009 Ent
|
Re: CreateProcessWithLogonW mit Parameters ?
17. Sep 2009, 13:35
Zitat von Luckie:
Was heißt "geht nicht"?
Hab grad was seltsames Festgestellt: Wenn ich für lpApplicationName den Pfad und Name der exe Datei angebe und für lpCommandLine die Parameter, dann scheints doch zu klappen... Jedoch nicht bei der Datei die ich testen wollte!
Ich versuchte eine Netzwerkkartentreiber Setup mit dem Parameter /s durchzuführen, das klappte nicht ->
Es gab kein fehler aber es passierte auch sonst nichts. Wenn ich den Parameter weglasse startet das Setup, aber eben nicht silent.
Wenn ich notepad starte, kann ich einen Dateipfad als Parameter mitgeben und da funktioniert es, es startet notepad mit der angegebenen Datei.
Is ja oberkomisch...
Hier mal ein Ausschnitt des Programms: (Hab auch noch die ganze Source hochgeladen)
Aufruf:
Delphi-Quellcode:
if ExtractFilePath(ParamStr(4)) = '' then
COMMANDLINE:=PWideChar(ExtractFilePath(ParamStr(0))+ParamStr(4))
else
COMMANDLINE:=PWideChar(ParamStr(4));
for I := 5 to ParamCount do
PARAMS := PWideChar(String(PARAMS) + ' ' + ParamStr(I));
WriteLn('"'+String(COMMANDLINE)+String(PARAMS) +'"');
USER:=PWideChar(ParamStr(1));
DOMAIN:=PWideChar(ParamStr(2));
PW:=PWideChar(ParamStr(3));
if not runas(USER, DOMAIN, PW, COMMANDLINE, PARAMS) then
begin
WriteLn(PChar(SysErrorMessage(GetLastError)));
end;
Funktion:
Delphi-Quellcode:
function Runas(USER,DOMAIN,PW,COMMANDLINE,PARAMS:PWideChar):boolean;
const
LOGON_WITH_PROFILE = $00000001;
function CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword: PWideChar;
dwLogonFlags: dword; lpApplicationName, lpCommandLine: PWideChar;
dwCreationFlags: dword; lpEnvironment: pointer;
lpCurrentDirectory: PWideChar; lpStartupInfo: PStartUpInfoW;
lpProcessInfo: PProcessInformation): boolean; stdcall;
external 'advapi32.dll';
implementation
function Runas(USER,DOMAIN,PW,COMMANDLINE,PARAMS:PWideChar):boolean;
var
si : TStartupInfoW;
pif : TProcessInformation;
begin
ZeroMemory(@si,sizeof(si));
si.cb := sizeof(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := 1;
if DOMAIN <> 'nil' then
begin
result := CreateProcessWithLogonW(USER,DOMAIN,
PW,LOGON_WITH_PROFILE,
COMMANDLINE, PARAMS,
CREATE_DEFAULT_ERROR_MODE,nil,nil,@si,@pif);
end
else
begin
result := CreateProcessWithLogonW(USER,nil,
PW,LOGON_WITH_PROFILE,
COMMANDLINE, PARAMS,
CREATE_DEFAULT_ERROR_MODE,nil,nil,@si,@pif);
end;
end;
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
|