AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TExec.exec mit Parameter?

Ein Thema von Stephan · begonnen am 27. Nov 2007 · letzter Beitrag vom 27. Nov 2007
Antwort Antwort
Stephan

Registriert seit: 28. Jun 2002
Ort: Tuttlingen
245 Beiträge
 
Delphi 2007 Professional
 
#1

TExec.exec mit Parameter?

  Alt 27. Nov 2007, 13:37
Hallo,

ich starte aus meiner Anwendung eine fremde .exe (unter einem anderen Benutzer) über:

Delphi-Quellcode:
var
 exec: TExec
begin
 exec := TExec.Create;
 exec.RunAs(AppFile,Account,Domain,Password);
end;
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?
viele Grüße

Stephan
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TExec.exec mit Parameter?

  Alt 27. Nov 2007, 13:42
Wie ist TExec denn definiert? Wie sieht TExec.RunAs aus?
  Mit Zitat antworten Zitat
Stephan

Registriert seit: 28. Jun 2002
Ort: Tuttlingen
245 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TExec.exec mit Parameter?

  Alt 27. Nov 2007, 13:49
Argh, ja natürlich. Hatte vergessen, dass das garkeine Standardklasse ist. Ich hab hier mal was rauskopiert:

Delphi-Quellcode:
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;
interessant dürfte die Zeile sein:

Delphi-Quellcode:
  Result := CreateProcessAsUser(hToken,lpCommandLine,nil, nil, nil, False,
      NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE, nil, PAnsiChar(ExtractFileDir(lpCommandLine)), si, pi);
http://msdn2.microsoft.com/en-us/library/ms682429.aspx
Der Dritte Parameter sollte es sein. Ich probiers und melde mich dann wieder.
viele Grüße

Stephan
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

Re: TExec.exec mit Parameter?

  Alt 27. Nov 2007, 13:52
Vielleicht klappt es ja, den Parameter getrennt durch ein Leerzeichen direkt an FileName (bzw. den Exe-Namen) anzuhängen?
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Stephan

Registriert seit: 28. Jun 2002
Ort: Tuttlingen
245 Beiträge
 
Delphi 2007 Professional
 
#5

Re: TExec.exec mit Parameter?

  Alt 27. Nov 2007, 13:53
Zitat:
Vielleicht klappt es ja, den Parameter getrennt durch ein Leerzeichen direkt an FileName (bzw. den Exe-Namen) anzuhängen?
leider nicht, schon getestet

Irgendwie scheint das auch nicht mit dem dritten Parameter zu funktionieren. Der Aufruf sieht nun wie folgt aus:

  Result := CreateProcessAsUser(hToken,lpCommandLine,'/winstart', nil, nil, False, .....)
viele Grüße

Stephan
  Mit Zitat antworten Zitat
Stephan

Registriert seit: 28. Jun 2002
Ort: Tuttlingen
245 Beiträge
 
Delphi 2007 Professional
 
#6

Re: TExec.exec mit Parameter?

  Alt 27. Nov 2007, 14:15
Hallo,

hat sich erledigt Einfach den vollständigen Pfad der .exe Datei + Parameter im dritten commandline Parameter verwenden. Das klappt dann
viele Grüße

Stephan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 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