Unsere Anwendung einen Hintergrund-Thread aufweist, der einen Prozess durch System.Diagnostics.Process
laicht:Prozess erzeugt durch Process.Start in .NET hängt der Faden
Process.Start(
new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
}
);
dies überhaupt keine Probleme zu haben, verwendet. Aber jetzt stirbt der Hintergrundfaden still; es kommt nie von dem Anruf zu Process.Start
zurück. Der catch-Block für diesen Code, der System.Exception
behandelt, wird ebenfalls nicht erreicht. Selbst wenn ich die Behandlung von Exceptions bei der Ausführung im Visual Studio-Debugger aktiviere, sehe ich keine Ausnahmen. Seltsamerweise wird der Prozess gut gemacht; Der Standardbrowser für den Benutzer wird mit der erwarteten URL gestartet.
Unser Prozess der Einstiegspunkt mit [STAThread]
markiert als empfohlen.
Was könnte unser Thread verursachen beenden zu leise? Gibt es Techniken, mit denen ich debuggen kann, was während der Thread-Beendigung passiert?
Update:
Es sieht aus wie der Faden, nachdem alle am Leben ist; es kommt einfach nicht von dem Anruf zurück. Hier ist seine Stack-Trace:!
- [In einem Schlaf warten oder sich]
- System.dll System.Diagnostics.ShellExecuteHelper.ShellExecuteOnSTAThread() + 0x63 Bytes
- System.dll System.Diagnostics.Process .StartWithShellExecuteEx (System.Diagnostics.ProcessStartInfo Startinfo) + 0x19d Bytes
- System.dll! System.Diagnostics.Process.Start() + 0x39 Bytes
- System.dll! System.Diagnostics.Process.Start (System.Diagnostics .ProcessStartInfo Startinfo) + 0x32 Bytes
- Meine Methode
Update 2:
Launching cmd.exe ohne die Schale mit Werken als Behelfslösung auszuführen. Vielen Dank! Allerdings würde ich noch gerne wissen, warum der Anruf nicht zurückkehrt.
Update 3:
Shell Haken wie eine logische Erklärung klingt für das, was den Anruf verursachen könnte Rückkehr nicht. Ich konnte den Schurken Modul nicht gefunden, aber nach dem letzten Versuch der Dinge durch Shell Ausführung zu laufen, wird der Anruf tat Rückkehr.
In jedem Fall ist es möglich, dass Benutzer Shell-Erweiterungen geladen haben, die den Start des Prozesses stören könnten und meinen Code nicht zurückgeben. Wir können nichts über , tun, also ist die richtige Antwort, die Problemumgehung des Startens eines cmd.exe-Prozesses zu verwenden.
Keine Überraschungen mit den 'Trace.WriteLine' Ergänzungen; der "Prozess begann". Linie wird nicht erreicht. – Jacob
Beim Starten von cmd.exe wird der Aufruf immer noch nicht zurückgegeben. – Jacob
Bah, aber es tut, wenn ich UseShellExecute auf false drehen. – Jacob