Ich habe ein großes Problem hier und kann es nicht beheben. Ich arbeite an einer Update-Software bei der Arbeit, die auch auf einem Computer mit laufenden Prozessen arbeiten muss. Wenn also eine Kopie oder eine andere Behandlung Ausnahmen verursacht, muss ich den Prozess, der den Fehler verursacht hat, abbrechen und es erneut versuchen und die Aktualisierung fortsetzen. Das Problem ist, dass ich diese Prozesse abbringe, aber Fenster sagen mir weiterhin, dass einige Prozesse geöffnet sind, selbst wenn ich sie getötet habe.Wie vermeide ich IOException nach dem Töten von Prozessen?
So habe ich eine Methode, die Dateien des Updates auf einem Computer kopieren, auf dem Prozesse ausgeführt werden. Ich habe Process.GetProcessesByName ("processName") und Lösung unten verwendet, um Prozesse zu beenden.
Using C#, how does one figure out what process locked a file?
Dies ist mein Code:
try
{
file.CopyTo(destAbsolutePath, true);
}
catch (IOException ioException)
{
foreach (var process in Process.GetProcessesByName(file.Name.Replace(Path.GetExtension(file.Name), "")))
{
process.Kill();
}
foreach (Process p in Win32Processes.GetProcessesLockingFile(file.FullName))
{
p.Kill();
}
file.CopyTo(destAbsolutePath, true);
}
ich mich fragen, ob Windows-Zeit benötigen, wenn ein Prozess abgebrochen wird wissen. Ich habe versucht, ein wenig zu warten, aber nichts passiert. Wenn ich meine Anwendung schließe, nachdem diese Prozesse beendet und neu geöffnet wurden, gibt es keinen Fehler mehr. Wenn ich meine Anwendung mit GetCurrentProcess.Kill()
kille, bleibt der Fehler dort. Ich glaube nicht, dass es meine Anwendung ist, die die IOException verursacht, weil ich nur das FileInfo-Objekt durchlaufen habe.
habe ich versucht, diese Lösung zu prüfen, ob meine Datei (eine DLL benutzerdefinierte Datei durch Prozesse verwendete ich getötet), die Prozesse gesperrt wurde nach der Tötung, die meine DLL-Datei verwenden und es gesperrt Wan't:
Is there a way to check if a file is in use?
Bitte, hilf mir. Danke
Ich habe versucht, WaitForExit() aufzurufen, aber das Problem bleibt dort. Schließlich, selbst wenn ich meine Anwendung töte und sie wieder öffne, habe ich den Fehler. –
Oh, und ich habe 2-3 Minuten nach dem letzten Fehler versucht, mein Programm neu zu starten und ... kein Fehler mehr ... Was sollte das Problem sein? –
Ok Ich habe das Problem gefunden, aber ich brauche jemanden, der mir hilft, es zu lösen. Bei meiner Arbeit gibt es Simulatoren, die aus mehreren Computern bestehen. Ich muss Prozesse auf allen Computern beenden. So, wie man alle Computerprozesse auflistet, wenn ich weiß, dass die Computer angesteckt werden und zusammenarbeiten? –