2009-10-29 13 views
5

Buduję program w języku C#, który rozpakowuje plik i pracuje nad tym plikiem.Jak zabić proces C#?

Czasami dostaję komunikat: „proces nie może uzyskać dostępu do pliku C: .... ponieważ jest on używany przez inny proces”

Co mogę zrobić? Jak to zabić?

Odpowiedz

10

Musisz dowiedzieć się, który program uzyskuje dostęp do pliku. Czy zapomniałeś zamknąć jedną ze swoich aplikacji lub czy są jakieś inne pliki?

Możesz napisać kod C#, aby zabić proces, ale lepszym podejściem byłoby dowiedzieć się, dlaczego jest już używany przez inny proces.

Aby zabić wszystkie procesy o nazwie nameOfProcess w C#:

Process[] ps = Process.GetProcessesByName("nameOfProcess"); 

foreach (Process p in ps) 
    p.Kill(); 

Ponadto, jak zauważa @Darin, można przyjrzeć się tej drugiej SO wątku: How do I find out which process is locking a file using .NET?

Do narzędzi Sysinternals że jest wspomniany przez @ Darin w komentarzach znajduje się na http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

+2

Aby dowiedzieć się od początku kto blokuje twój plik, powinieneś zajrzeć do ProcessMonitor od sysinternals. Wystarczy kliknąć na lunetę na pasku narzędzi i wpisać nazwę pliku. Otrzymasz listę wszystkich procesów, które mają otwarty uchwyt do tego pliku. – Oliver

2

Monitor procesu będzie działać, ale Process Explorer jest znacznie lepszą aplikacją dla to. Jest również z Sysinternals, który jest teraz własnością Microsoft. Uruchom Eksplorator procesów jako administrator, a następnie kliknij przycisk wyszukiwania. Spowoduje to wyświetlenie aplikacji i wątków, które używają tego pliku.

+0

I sekundę tę odpowiedź. To bardzo pomogło mi w debugowaniu. – Joel