Anzeige

WaitForExit wird ignoriert/übersprungen


#1
Hallo Leute

Unter VS2008 Win7 x64 habe ich folgenden Code entwickelt:
Code:
ProcessStartInfo pi = new ProcessStartInfo();
try
            {
                pi.Arguments = "test";
                pi.FileName = "TestTool.exe";  //eine Windows Forms Anwendung
                pi.WorkingDirectory = System.Windows.Forms.Application.StartupPath;

                Process p = Process.Start(pi);
                                p.WaitForExit();
            }
            catch (Exception ex)
            {
                throw new Exception("Fehler bei TestTool.exe\n" + ex.Message);
            }
System.Windows.Forms.MessageBox.Show("TestTool wurde beendet.");
Mein Problem:
Auf Entwicklungsrechner verhält er sich wie er soll. Erst Testtool starten, nachdem dieses geschlossen, kommt die Messagebox. Aber bei einigen Rechnern kommt die Messagebox sofort nach dem Start des Testtools.
Bisher konnte ich feststellen, dass:
Geht: WinXP_SP3(neu aufgesetzter Rechner), Win7(x64) , Win8(x64)
Geht nicht: WinXP_SP3(hat schon C# Programme im Einsatz), Win7(x32,x86)

Meine Schlussfoglerung unter 32Bit Systemen wird das WaitForExit ignoriert.
Weiß jemand warum und wie ich das beheben kann? Fehlt auf den Systemen ein Patch?
Unter Google habe ich noch nichts richtig passendes gefunden.

Grüße Cornflake
 

Spyke

Capoeirista
Premium-User
#2
Ist testtoll.exe x86 oder x64?
Explizit mal dein Programm und testtool als x86 gebuildet?

Ich würde erstmal ganz blöd vermuten das BadImageFormatException eigentlich erscheinen sollte und "verschluckt" wird
 

ksk

Erfahrenes Mitglied
#3
Hy, probier mal für WaitOnExit eine Zeit anzugeben (in diesem Fall 1 Min.) und die WindowsShell nicht zu verwenden.
Ich vermute mal das ein UI-Thread läuft aber kann mich auch irren.

Code:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = calledFileName;
p.StartInfo.Arguments = arguments;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
p.WaitForExit(60000);
string errMSG = p.StandardOutput.ReadToEnd();
p.Close();
p.Dispose();

Gruß
ksk
 
Anzeige
Anzeige