AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateProcessWithLogonW mit Parameters ?
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcessWithLogonW mit Parameters ?

Ein Thema von cherry · begonnen am 17. Sep 2009 · letzter Beitrag vom 30. Sep 2009
Antwort Antwort
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

CreateProcessWithLogonW mit Parameters ?

  Alt 17. Sep 2009, 12:20
Hallo Leute

Ich versuche mit folgender API Funktion ein anderes Programm unter einem anderen Kontext zu starten. Wenn ich für lpApplicationName oder lpCommandLine das Programm ohne Parameter angebe, funktioniert alles Prima. Ich kriegs aber nicht hin ein Programm mit Parametern zu starten, wie muss ich vorgehen, oder ists gar nicht möglich?

Delphi-Quellcode:
  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';
Folgendes habe ich bereits versucht:

lpApplicationName = exe + params
lpCommandLine = exe + params
lpApplicationName = exe UND lpCommandLine = params

geht alles nicht....
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 17. Sep 2009, 12:23
Was heißt "geht nicht"?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ringli

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

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 17. Sep 2009, 12:24
Wie sieht denn dein Aufruf genau aus?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 17. Sep 2009, 12:26
Hallo,

wie ist der Pfad zum Programm, ist es im Suchpfad? Gibt es da irgendwo Leerzeichen drin, so dass Du eventuell " um die Programmangabe machen musst?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 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 <> 'nilthen
  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;
Angehängte Dateien
Dateityp: rar erunas_110.rar (70,3 KB, 30x aufgerufen)
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 17. Sep 2009, 14:00
Hallo,

mal 'nen blöden Vorschlag:

Baue mal eine Batchdatei, die das Setup /s enthält und frage anschließend den Errorlevel ab, eventuell hat die Setup.exe ja irgendein Problem.

Code:
@ECHO OFF
@ECHO Vor Setup > log.datei
:REM in der nächsten Zeile mit komplettem Pfad angeben
setup /s
@ECHO Rueckgabewert der Setup.exe %ERRORLEVEL% >> log.datei
Wenn Du dann in die log.datei schaust, solltest Du deren Errorlevel sehen, wenn der <> 0 ist, liegt die Vermutung nahe, dass sie Dir einen Hinweis auf einen Fehler geben will. 0 ist ellerdings nicht zwingend identisch mit keinem Fehler.

Was für eine Ausgabe bekommst Du, wenn Du die Setup.exe mit dem Paramter /s von der Kommandozeile aufrufst?

Wenn dort eine Textausgabe kommt, könntest Du die Batchdatei auch mal dahingehend ändern:
Code:
@ECHO OFF
@ECHO Vor Setup > log.datei
:REM in der nächsten Zeile mit komplettem Pfad angeben
setup /s >> log.datei
@ECHO hinter Setup >> log.datei
@ECHO Rueckgabewert der Setup.exe %ERRORLEVEL% >> log.datei
Mit ein bisserl Glück kommst Du so an eine Fehlermeldung, die Dir bei der Problemlösung weiterhelfen könnte.

[edit]Schreibfehler in der zweiten Batchdatei behoben, statt @ECHO hinter Setup > log.datei muss es @ECHO hinter Setup >> log.datei heißen.[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#7

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 17. Sep 2009, 14:12
Zitat von nahpets:
Was für eine Ausgabe bekommst Du, wenn Du die Setup.exe mit dem Paramter /s von der Kommandozeile aufrufst?
in der textdatei "%ERRORLEVEL% >> error.log" steht nichts drinn. Ist ja auch logisch, das Setup wird, wenn ichs in der Kommandozeile eingebe so installiert wies sein soll...

Aber ich hab da eine wage Vermutung:

Wenn ich das Setup in einem Batch ausführe, bleibt die Kommandozeile so lange offen, bis das Setup fertig ist und schliesst dann.
Wenn ich Programme mit ERunAs starte funktionieren diese IMHO wenns nur darum geht kurz mal was zu starten. Ich hab das gefühl, dass wenn ERunAs das Setup zwar startet, dann aber gleich wieder abschiesst, weil ERunAs nicht wartet bis das Setup beendet ist...

Was ich auch noch versucht habe ist: (setup.exe /s) in einen batch, dann den Batch mit ERunAs starten. Geht auch nicht. Ich seh mal kurz dass ein CMD startet, dann aber gleich wieder zu geht...

Ideen?
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 30. Sep 2009, 09:49
Per Zufall habe ich den Fehler entdeckt: [Danke Luckie]

http://www.michael-puff.de/Developer...thLogonW.shtml

Der korrekte Aufruf erfolgt so:
(Die entsprechende Stelle ist markiert)

result := CreateProcessWithLogonW(PWideChar(USER),PWideChar( DOMAIN),
PWideChar(PW),LogonType,
nil, PWideChar(APPLICATION +' "'+ PARAMS +'"'),
CREATE_DEFAULT_ERROR_MODE,nil,nil,@si,@pif);

So, Problem gelöst.
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 30. Sep 2009, 10:02
Zitat von cherry:
Per Zufall habe ich den Fehler entdeckt: [Danke Luckie]
Dafür dass ich direkt mit der Nase draufgestoßen habe: http://www.delphipraxis.net/internal...084732#1084732 war der Zufall nicht besonders groß.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#10

Re: CreateProcessWithLogonW mit Parameters ?

  Alt 30. Sep 2009, 10:39
Zitat von Luckie:
Zitat von cherry:
Per Zufall habe ich den Fehler entdeckt: [Danke Luckie]
Dafür dass ich direkt mit der Nase draufgestoßen habe: http://www.delphipraxis.net/internal...084732#1084732 war der Zufall nicht besonders groß.
Na ja, je nach dem wie man es Betrachtet:
Ich versuchte ein Problem mit CreateProcessWithLogonW zu lösen, aber ich kriegte es nicht hin. Deshalb dieser Thread hier. Als mir nieman Helfen konnte, resp. ich es einfach nicht hinbekommen habe, entschied ich mich einen anderen Lösungsansatz zu wählen. Da hatte ich das Problem hier: http://www.delphipraxis.net/internal....php?p=1084732 und in diesem Thread präsentiertest du mir dann die Lösung für diesen Thread hier. Somit wäre der Thread http://www.delphipraxis.net/internal....php?p=1084732 überflüssig gewesen.

Wenn ich nun aber das sperren der Tastatur und Maus auf Anhieb hinbekommen hätte, so hätte ich CreateProcessWithLogonW wohl nie hinbekommen...
Und wenn man das so betrachtet ist das schon eher witzig. Oder?!!
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  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 02: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