Einzelnen Beitrag anzeigen

Benutzerbild von little_budda
little_budda

Registriert seit: 5. Mai 2006
Ort: Velbert
246 Beiträge
 
Delphi 2006 Professional
 
#1

CreateProcess startet meine Anwendung nicht

  Alt 21. Jul 2008, 07:35
Hallo,

ich wollte mal einen Versuch starten eine externe Anwendung zu starten und den Datenstrom selbst in einer Box darzustellen.
Meine Spielwiese besteht aktuell aus zwei Edits und einem Button zum starten.
Edit 1 [ed_app] : "ipconfig"
Edit 2 [ed_para]: "/all"

Ich habe hier im Forum folgenden Code gefunden
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var StartStruct: STARTUPINFO; // Anweisungen für den Prozess-Start
    ProcInfo: PROCESS_INFORMATION; // das kriegen wir zurück
    WriteInput, ReadOutput: THandle; // hierüber können wir mit dem Prozess kommunizieren
    SecAttr: SECURITY_ATTRIBUTES; // hiermit sagen wir, dass die Handles vererbbar werden sollen
    pAppStr, pAttrStr : PAnsiChar;
begin
  pAppStr := pchar(ed_app.text);
  pAttrStr := pchar(ed_para.text);

  FillChar(StartStruct, SizeOf(StartStruct), #0);

  StartStruct.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
  StartStruct.wShowWindow := SW_MAXIMIZE;
  StartStruct.cb:=SizeOf(StartStruct); // Die Größenangabe muss stimmen!

  StartStruct.dwFlags:=STARTF_USESTDHANDLES; // Wir wollen die Standard-Handles umleiten

  SecAttr.nLength := SizeOf(SecAttr);
  SecAttr.lpSecurityDescriptor := nil; // Standard-Sicherheit
  SecAttr.bInheritHandle := True; // vererbbar

  CreatePipe(ReadOutput, StartStruct.hStdOutput, @SecAttr, 0);
  CreatePipe(StartStruct.hStdInput, WriteInput, @SecAttr, 0); //die Handles erzeugen

  CreateProcess(
               pAppStr, { LPCTSTR               - lpApplicationName    }
               pAttrStr, { LPTSTR                - lpCommandLine        }
               nil, { LPSECURITY_ATTRIBUTES - lpProcessAttributes  }
               nil, { LPSECURITY_ATTRIBUTES - lpThreadAttributes   }
               false, { BOOL                  - bInheritHandles      }
               CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, { DWORD - dwCreationFlags }
               nil, { LPVOID                - lpEnvironment        }
               nil, { LPCTSTR               - lpCurrentDirectory   }
               StartStruct, { LPSTARTUPINFO         - lpStartupInfo        }
               ProcInfo { LPPROCESS_INFORMATION - lpProcessInformation }
               );

  CloseHandle(StartStruct.hStdOutput);
  CloseHandle(StartStruct.hStdInput);
  CloseHandle(ProcInfo.hProcess); // Nur falls du das Prozesshandle nicht brauchst
  CloseHandle(ProcInfo.hThread);

  //jetzt mit ReadFile/WriteFile kommunizieren

  CloseHandle(WriteInput);
  CloseHandle(ReadOutput);
end;
Ich durchblicke diesen Code nicht wirklich, aber er startet jedenfalls keine Anwendung.
Ich wäre schon dankbar für einen Tipp oder eine Erklärung.

Gruß Holger.

Holger
Glück findet sich nicht im Code
Gefahren werden ist nur solange schön wie man selbst nicht lenken möchte ...
  Mit Zitat antworten Zitat