CreateProcess() Ausgabe

  • Themenstarter Themenstarter Futzel
  • Beginndatum Beginndatum
F

Futzel

Hallo,

folgendes Problem stellt sich mir.
Ich erstelle einen neuen Prozess "Prozess 2 (Konsolenfenster).

1. Prozess 1 soll bei Beendung von Prozess 2 (Fenster wird geschlossen) ausgeben ob der Process erfolgreich oder nicht erfolgreich beendet wurde.

2. Prozess 2 soll in seinem Konsolenfenster seine ProzessID ausgeben.


Wie bekomme ich diese beiden Punkte realisiert

Hier mein Bisheriger Code:

C++:
int _tmain(int argc, _TCHAR* argv[])
{
	STARTUPINFO si;
    PROCESS_INFORMATION pi;
	DWORD rwait;

	// --- Speicher loeschen STARTUPINFO --- 
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);  // Groesse 

	// --- Speicher loeschen ProcessInfo --- 
    ZeroMemory( &pi, sizeof(pi) );

	//Fenstertitel umbenennen
	GetStartupInfo(&si);
	si.lpTitle =("Prozess 2");

	//Auf Multibyte-Char umstellen
    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        "cmd.exe",        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        CREATE_NEW_CONSOLE,              //creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
		cout << "CreateProcess failed: "<< GetLastError() <<endl;
        exit(-1);
    }

	//Ausgabe von hProcess und dwProcessId
	cout << "Die ProzessID von Prozess 2 ist: " << + pi.hProcess << endl; 
	cout << "Die dWProzessID von Prozess 2 ist: " << + pi.dwProcessId << endl << endl;



	cout << "GEtCurrentProcessID: " << GetCurrentProcessId() << endl;



    // Wait until child process exits.
    rwait = WaitForSingleObject( pi.hProcess, INFINITE );

	if (rwait != WAIT_FAILED)
	{
		cout << "Prozess erfolgreich beendet" <<endl;
	}else{

		cout << "Prozess nicht erfolgreich beendet" << GetLastError() << endl;
	}

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );

	getch();
	return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Hi.
Ich erstelle einen neuen Prozess "Prozess 2 (Konsolenfenster).

1. Prozess 1 soll bei Beendung von Prozess 2 (Fenster wird geschlossen) ausgeben ob der Process erfolgreich oder nicht erfolgreich beendet wurde.
Siehe http://msdn.microsoft.com/en-us/library/ms683189(v=VS.85).aspx
2. Prozess 2 soll in seinem Konsolenfenster seine ProzessID ausgeben.
Siehe http://msdn.microsoft.com/en-us/library/ms683215(v=VS.85).aspx bzw. http://msdn.microsoft.com/en-us/library/ms683180(v=VS.85).aspx

Gruß
 
Danke für deine Anwort.

Frage 1 wäre damit erledigt.

Bei der 2 Frage komme ich nicht ganz weiter. Die von dir gepostete Funktion ist schonmal genau das was ich suche.
Allerdings weiß ich nicht, wie ich die Ausgabe auf dem 2 Konsolenfenster (von Prozess 2) ausgeben lassen kann und nicht in dem Konsolenfenster von Prozess 1.
 
Bei der 2 Frage komme ich nicht ganz weiter. Die von dir gepostete Funktion ist schonmal genau das was ich suche.
Allerdings weiß ich nicht, wie ich die Ausgabe auf dem 2 Konsolenfenster (von Prozess 2) ausgeben lassen kann und nicht in dem Konsolenfenster von Prozess 1.
Wo ist das Problem? Du mußt doch nur die Ausgabe durchführen. Prozess 2 erhält eine neue Konsole und druckt auch da die ID aus.

Gruß
 
Im Anhang ein Screenshot nachdem ich das Programm gestartet habe. Die Ausgabe wird nur im ersten Konsolenfenster gemacht.

Es soll auch später möglich sein, in dem 2 Konsolenfenster (Prozess 2) eien Eingabe zu tätigen.
 

Anhänge

  • 1.png
    1.png
    49,2 KB · Aufrufe: 50
Im Anhang ein Screenshot nachdem ich das Programm gestartet habe. Die Ausgabe wird nur im ersten Konsolenfenster gemacht.

Es soll auch später möglich sein, in dem 2 Konsolenfenster (Prozess 2) eien Eingabe zu tätigen.
Offenbar startest du ja die cmd.exe als zweiten Prozeß. Die Aufgabe lautete doch aber
Prozess 2 soll in seinem Konsolenfenster seine ProzessID ausgeben.
D.h. du mußt ein weiteres Programm schreiben, welches einfach seine ProzessID ausgibt.

Wenn du im ersten Prozess irgendwas ausgibst, wird das natürlich in die erste Konsole geschrieben.

Gruß
 
Zurück