Hier zu haben ist ein kleines Programm, das Verhalten mit Cygwin 2.5.2 unter Windows 7.Cygwin: Aufruf zu spawnvp verursacht nicht-Konsolenprogramm ein Konsolenfenster
#include <windows.h>
#include <process.h>
int main(void)
{
const char * const argv[] = {
"c:/Windows/System32/notepad.exe",
0
};
Sleep(5000);
return spawnvp(_P_WAIT, argv[0], argv);
}
Dies wird gebaut zu reproduzieren, wie folgt:
$ gcc -mwindows spawn.c -o spawn
Die gute: korrekt, wird dieses Programm nicht mit einem Konsolenfenster starten. Wir können zu seinem Verzeichnis mit Windows Explorer navigieren und es starten. Nichts erscheint auf dem Bildschirm, wie das Programm beginnt mit der Ausführung und erreicht die Sleep(5000)
Aussage.
Die schlechte: Nach fünf Sekunden übergeben, wird der spawnvp
Aufruf ausgeführt, und das Programm bekommt ein Konsolenfenster! Der Editor wird gestartet und sein Fenster wird über diesem Konsolenfenster angezeigt.
Kann mir jemand erklären, warum und wie diese weg gehen zu lassen? Nur Notepad sollte angezeigt werden, nicht irgendein falsches Konsolenfenster.
Natürlich, wenn wir ein Konsolenprogramm spawnen, , dass Programm sollte ein eigenes Konsolenfenster bekommen. Das ist nicht das Problem hier; die Mutter wird immer das unerwünschte Fenster (und das Kind ist nicht ein Konsolenprogramm überhaupt).
Update: Ich Wiederaufbau jetzt Cygwin zu können Hoffnung, einige Debug-print-Anweisungen in die komplizierten Eingeweide hinzufügen zugrunde liegenden spawn*
Funktionen, bei denen zu sehen, zeigt die Fenster erscheinen.