Announcement

Collapse
No announcement yet.

CreateProcess und Parameterübergabe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CreateProcess und Parameterübergabe

    Hallo,

    das bedeutet, das ein Com-Aufruf auf eine registrierte DLL stattfindet. Von dieser DLL wird auf ein Package zugegriffen. <br>Aus einer Form aus dem Package möchte ich ein anderes Programm (exe) mit Parametern starten und warten, bis dieses beendet wurde

  • #2
    CreateProcess und Parameterübergabe

    Hallo,

    ich will eine exe mit Parameterübergabe starten und muss warten, bis diese beendet wurde, mein Versuch ist leider fehlgeschlagen:

    function ProgAusfuehren(const aDateiname, aParameter: string): Boolean;

    var
    aSI : TStartupInfo;
    aPI : TProcessInformation;
    aProc : THandle;
    dwTest: DWORD;

    begin

    FillChar(aSI, SizeOf(aSI), 0);

    aSI.cb := SizeOf(aSI);

    aSI.lpTitle := PChar('');

    aSI.wShowWindow := sw_ShowNormal;

    Result := CreateProcess(PChar(aDateiname), PChar(aParameter), nil, nil,
    False, NORMAL_PRIORITY_CLASS, nil, nil, aSI, aPI);

    aProc := aPI.hProcess;

    CloseHandle(aPI.hThread);

    if WaitForSingleObject(aProc, Infinite) <> Wait_Failed then

    GetExitCodeProcess(aProc, dwtest);

    CloseHandle(aProc);

    end;

    Beim auslesen von ParamStr habe ich darauf geachtet, dass
    for i:=0 to ParamCount
    benutzt wurde, (ohne -1)
    über ShellExecute funktioniert aber die Parameterübergabe.

    mfg Stephan Hartmann

    Comment


    • #3
      Hallo,

      wenn man sich die Hilfe zu <b>CreateProcess</b> im Microsoft Platform SDK einmal anschaut, fällt auf, dass die ersten beiden Parameter in verschiedenen Bedeutungen eingesetzt werden können. Der zweite Parameter <i>lpCommandLine</i> kommt nur dann als separater Parameterblock zum tragen, wenn das aufgerufene Programm diese auch wirklich über <b>GetCommandLine</b> beim Betriebssystem abfragt.

      Ich würde daher auf die 2. Variante wechseln (die im SDK auch für alle gestarteten 16-Bit-Anwendungen sogar zwingend vorgeschrieben wird): <br>
      1. Parameter <i>lpApplicationName</i> ist <b>Nil</b> <br>
      2. Parameter <i>lpCommandLine</i> enthält sowohl die Anwendung als auch den Parameterblock: "<i>If lpApplicationName is NULL, the first white-space – delimited token of the command line specifies the module name. If you are using a long file name that contains a space, use quoted strings to indicate where the file name ends and the arguments begin (see the explanation for the lpApplicationName parameter). If the file name does not contain an extension, .exe is appended. If the file name ends in a period (.) with no extension, or if the file name contains a path, .exe is not appended. </i>&quot

      Comment


      • #4
        Vielen Dank Herr Kosch..

        Comment


        • #5
          In einer exe funktioniert alles einwandfrei, wenn ich allerdings eine bpl verwende, die über OLE aufgerufen wird, gibt es folgendes Problem:

          Wenn versucht wird, das aufgerufene Programm zu beenden, dann wird dieses nicht komplett aus dem Speicher entfernt und meine Anwendung bleibt bei WaitForSingleObject solange stehen, bis ich den Prozeß von Hand rauswerfe, hätten Sie eine Idee woran das liegt

          Comment


          • #6
            Hallo,

            was bedeutet "bpl verwende, die über OLE aufgerufen wird"

            Comment

            Working...
            X