AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateProcess startet meine Anwendung nicht
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcess startet meine Anwendung nicht

Ein Thema von little_budda · begonnen am 21. Jul 2008 · letzter Beitrag vom 22. Jul 2008
Antwort Antwort
Benutzerbild von little_budda
little_budda

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

Re: CreateProcess startet meine Anwendung nicht

  Alt 22. Jul 2008, 06:38
Hallo,

danke für die vielen Tipps.
ich habe es jetzt wie folgt realisiert und es klappt.
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;
    pAppStr : PAnsiChar;
begin
  // AnwendungsString zusammenbauen
  pAppStr := pchar('"' + ed_app.text + '" "' + 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

  if (CreateProcess(
                    nil, { LPCTSTR               - lpApplicationName    }
                    pAppStr, { LPTSTR                - lpCommandLine        }
                    nil, { LPSECURITY_ATTRIBUTES - lpProcessAttributes  }
                    nil, { LPSECURITY_ATTRIBUTES - lpThreadAttributes   }
                    true, { BOOL                  - bInheritHandles      }
                    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, { DWORD - dwCreationFlags }
                    nil, { LPVOID                - lpEnvironment        }
                    nil, { LPCTSTR               - lpCurrentDirectory   }
                    StartStruct, { LPSTARTUPINFO         - lpStartupInfo        }
                    ProcInfo { LPPROCESS_INFORMATION - lpProcessInformation }
                    )) then
    begin
      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
  else
    begin
      MessageDlg('Die Anwendung konnte nicht gestartet werden', mtError, [mbOk], 0, mbOk);
    end;
end;
Nun werder ich mich mal mit "ReadFile/WriteFile" beschäftigen.
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
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 07:18 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 by Thomas Breitkreuz