Benutzer mit den meisten Antworten
Anwendung automatisch durch Shutdown beenden - Process route.exe kann nicht ausgeführt werden

Frage
-
Hallo,
beim Beenden meiner Anwendung führe ich den folgenden Code beim Dispose meiner Klasse aus.
System.Diagnostics.Process processT = new System.Diagnostics.Process(); processT.StartInfo.UseShellExecute = false; processT.StartInfo.CreateNoWindow = true; processT.StartInfo.RedirectStandardOutput = true; processT.StartInfo.FileName = "route.exe"; processT.StartInfo.Arguments = "delete " + RemoteIpAddress; processT.Start(); processT.WaitForExit(10000); processT.Dispose();
Wenn ich die Anwendung regulär beende funktioniert das auch.
Wenn die Anwendung aber durch Windows-Shutdown beendet wird erscheint eine MessageBox dass route.exe nicht ausgeführt werden könnte.
Meine Vermutung hier ist nun dass der bereits initiierte shutdown die systemfunktionen für route.exe bereits verhindert. Gibt es hier eine Idee wie das trotzdem durchgeführt werden kann?
Gruß & Danke,
Chris
Antworten
-
Hallo,
habe für mich eine Lösung gefunden wie ich das Herunterfahren zuverlässig detektiere:
SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding); ... private static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) { bIsShutdownActive = true; } ... if (!bIsShutdownActive) { ... }
Gruß,
Chris
- Als Antwort markiert chrisx51 Mittwoch, 14. Januar 2015 16:14
Alle Antworten
-
Hallo,
meines Wissens nach verhält es sich so, dass wenn das Herunterfahren einmal gestartet wurde, man auch keine Prozesse mehr starten kann. Dein Code kann daher nicht funktionieren.Du könntest versuchen einen das Programm zu registrieren, sodass es ausgeführt wird wenn Windows herunter gefahren wird. Allerdings bezweifle ich den Erfolg des Ganzen.
Dein Code wirkt so, als ob du einfach nur eine IP aus einer Liste austragen willst. Ich halte es für besser das in der selben Anwendung zu machen, um keinen 2. Prozess aufrufen zu müssen. Kommst du denn an den Code von route.exe heran bzw. weißt du was genau geschieht wenn du es mit den obigen Parametern aufrufst?
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo,
danke schonmal für die Antwort.
Genaugenommen müsste ich diese Befehle (route.exe delete) beim Herunterfahren des Systems nicht ausführen. Ich gehe davon aus dass diese dann beim nächsten Boot wieder erstellt werden.
Daher versuche ich mir jetzt zu behelfen indem ich den Status des Herunterfahrens erkennen möchte:
if (!System.Environment.HasShutdownStarted)
Dummerweise funktioniert dies nicht. Offenbar erkennt diese Funktion das Herunterfahren erst zu einem späteren Zeitpunkt.
Auch habe ich versucht das löschen der netzwerkrouten ohne Verwendung von route.exe vorzunehmen; habe aber noch keine passende .Net Funktion dafür gefunden.
Werde jetzt mal weiter das 'HasShutDownStarted' analysieren.
Danke & Gruß,
Chris
-
Hallo,
habe für mich eine Lösung gefunden wie ich das Herunterfahren zuverlässig detektiere:
SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding); ... private static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) { bIsShutdownActive = true; } ... if (!bIsShutdownActive) { ... }
Gruß,
Chris
- Als Antwort markiert chrisx51 Mittwoch, 14. Januar 2015 16:14