![]() |
TExec.exec mit Parameter?
Hallo,
ich starte aus meiner Anwendung eine fremde .exe (unter einem anderen Benutzer) über:
Delphi-Quellcode:
auf. Das klappt soweit auch ganz gut, allerdings sollte ich nun noch einen Parameter "/xyz" beim Start der .exe mit übergeben. Allerdings scheint es bei dem Funktionsaufruf "RunAs" keinen Parameter hierfür zu geben. Hat jemand eine Idee, wie ich das Problem lösen kann?
var
exec: TExec begin exec := TExec.Create; exec.RunAs(AppFile,Account,Domain,Password); end; |
Re: TExec.exec mit Parameter?
Wie ist TExec denn definiert? Wie sieht TExec.RunAs aus?
|
Re: TExec.exec mit Parameter?
Argh, ja natürlich. Hatte vergessen, dass das garkeine Standardklasse ist. Ich hab hier mal was rauskopiert:
Delphi-Quellcode:
interessant dürfte die Zeile sein:
function TExec.RunAs(FileName:String;User,Domain,Password:String):Boolean;
begin if StartType<>0 then Result:=False else Result:=StartClientProcess(PChar(User),PChar(Domain),PChar(Password),PChar(FileName),fErr); end; function TExec.StartClientProcess(lpszUsername, lpszDomain, lpszPassword, lpCommandLine: PChar;var ERR_CODE:integer): Boolean; var si: STARTUPINFO; ProfileInfo: TProfileInfo; begin StartType:=1; ERR_CODE:=ERR_NONE; Result:=False; hdesktop:=0; hwinst:=0; hwinstSave:=0; pS:=nil; try if not LogonUser(lpszUsername,lpszDomain,lpszPassword,LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,hToken) then begin ERR_CODE:=ERR_LOGON; Exit; end; hwinstSave:=GetProcessWindowStation; ERR_CODE:=ERR_WINST; if hwinstSave = 0 then Exit; hwinst := OpenWindowStation('winsta0',False, READ_CONTROL or WRITE_DAC); if hwinst = 0 then Exit; if not SetProcessWindowStation(hwinst) then Exit; ERR_CODE:=ERR_DESKTOP; hdesktop := OpenDesktop('default', 0, False, READ_CONTROL or WRITE_DAC or DESKTOP_WRITEOBJECTS or DESKTOP_READOBJECTS); if not SetProcessWindowStation(hwinstSave) then Exit; if hdesktop = 0 then Exit; if not GetLogonSID(hToken, pS) then Exit; if not AddAceToWindowStation(hwinst, pS) then Exit; if not AddAceToDesktop(hdesktop, pS) then Exit; FillChar(ProfileInfo, SizeOf(TProfileInfo),#0); ProfileInfo.dwSize := SizeOf(TProfileInfo); ProfileInfo.dwFlags := PI_NOUI; ProfileInfo.lpUserName :=lpszUsername; ERR_CODE:=ERR_LOADPROFILE; if not LoadUserProfile(hToken, ProfileInfo) then Exit; ERR_CODE:=ERR_IMPERSONATE; if not ImpersonateLoggedOnUser(hToken) then Exit; ZeroMemory(@si, SizeOf(STARTUPINFO)); si.cb := SizeOf(STARTUPINFO); si.lpDesktop := PChar('winsta0\default'); ERR_CODE:=ERR_CREATEPROCESS; Result := CreateProcessAsUser(hToken,lpCommandLine,nil, nil, nil, False, NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE, nil, PAnsiChar(ExtractFileDir(lpCommandLine)), si, pi); if not Result then ERR_CODE:=ERR_CREATEPROCESS else ERR_CODE:=ERR_NONE; RevertToSelf(); finally end; end;
Delphi-Quellcode:
Result := CreateProcessAsUser(hToken,lpCommandLine,nil, nil, nil, False,
NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE, nil, PAnsiChar(ExtractFileDir(lpCommandLine)), si, pi); ![]() Der Dritte Parameter sollte es sein. Ich probiers und melde mich dann wieder. |
Re: TExec.exec mit Parameter?
Vielleicht klappt es ja, den Parameter getrennt durch ein Leerzeichen direkt an FileName (bzw. den Exe-Namen) anzuhängen?
|
Re: TExec.exec mit Parameter?
Zitat:
Irgendwie scheint das auch nicht mit dem dritten Parameter zu funktionieren. Der Aufruf sieht nun wie folgt aus:
Delphi-Quellcode:
Result := CreateProcessAsUser(hToken,lpCommandLine,'/winstart', nil, nil, False, .....)
|
Re: TExec.exec mit Parameter?
Hallo,
hat sich erledigt :) Einfach den vollständigen Pfad der .exe Datei + Parameter im dritten commandline Parameter verwenden. Das klappt dann :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 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