Gegeben ist eine Visual C++ 2010 GUI-Anwendung und eine Konsolenapplikation, erstellt mit Visual C++ 6! (kein GUI).
Aufgabe: Das GUI soll die Konsolenapplikation aufrufen und dieser einen Dateinamen als Parameter übergeben. Die Konsolenanwendung öffnet die Datei, arbeitet damit
und schließt sich wieder. Dabei wird an das GUI ein Rückgabewert übergeben.
Durch die Verwendung der Klasse Process und ihre Members funktioniert die
Ausführung des Kommandozeilen-Programmes funktioniert.
Ich übergebe den Namen der ausführbaren Datei
sowie ein Argument, das den vollständigen Pfad einer Datei darstellt, die
das Kommandozeilen-Programm verarbeiten soll. Hier mein Quellcode:
p = gcnew Process();
try
{
ProcessStartInfo^ psi = gcnew ProcessStartInfo("cmd", "/K \"conv6.exe C:\\Temp\\Test123.xls\"");
psi->CreateNoWindow = true;
p->StartInfo = psi;
p->EnableRaisingEvents = true;
p->Exited += gcnew EventHandler(this, &ExtPrgmStrt::Form1::processExited);
p->Start();
}
catch ( Exception^ e )
{
label1->Text = ( e->Message );
}
void processExited(System::Object^ sender, System::EventArgs ^e)
{
label1->Text = "Prozess Exit-Code: " + Convert::ToString(p->ExitCode);
}
Problem:
Ich kann
den Exit (Return) Code des Kommandozeilen-Programmes
in der DOS-Box sehen - leider muss ich die DOS-Box
manuell schließen (mit dem DOS-Befehl exit).
Die CreateNoWindow Eigenschaft auf true gesetzt
scheint keine Wirkung zu haben. Des Weiteren
bekomme ich den Exit-Code in meiner
GUI-Anwendung erfolgreich zurück, aber nur nachdem ich die
DOS-Box manuell schließe.
Kann jemand
mir bitte helfen? Wie kann man richtig das Erscheinen der DOS-Box
unterdrücken und dennoch den Exit-Code ins GUI einlesen?