2012-12-26 11 views
10

Zainstalowałem system Windows 8 około miesiąc temu i miałem problemy z tym, że gdy proces się zawiesza, nie mogę go zakończyć/zabić. Ani menedżer zadań ani CMD Taskkill/f/PID #### nie wykonają zadania, więc pomyślałem, że napiszę swój własny proces killer w C# i zobaczę, jakie problemy pojawiają się.Problemy z procesem zabijania (Windows 8)

Po napisaniu małej aplikacji zdałem sobie sprawę, że nie jestem aż tak mądry, jak myślałem - nadal nie mogę zakończyć tego procesu. Na początku byłem w stanie znaleźć sposobu według nazwy/PID:

Process p = Process.GetProcessById(aPid) 
//or 
foreach (Process p in Process.GetProcessesByName(aProcessName) 

..i był już „Odmowa dostępu” wyjątek kiedy próbowałem:

process.Kill(); 

..after kilku próbach, które zmienione i nie będę już w stanie znaleźć tego procesu. Na przykład. kiedy próbowałem znaleźć go po nazwie lub PID nic nie zostało zwrócone, podczas gdy proces nadal pozostał w Menedżerze zadań i na moim ekranie.

Mam również przeczytać na proces @MSDN i mówi, że „Odmowa dostępu” może zostać wygenerowany, jeśli proces jest już wypowiedzenia lub nie może zostać rozwiązana .. :(

pomóc? Czy naprawdę nie ma mowy TO FORCE end process?

+0

czy wypróbowujesz powerhell stop-process? – tschmit007

Odpowiedz

11

Cóż, zasadniczo napotkasz ten sam problem, który uniemożliwia Menedżerowi zadań zakończenie procesu.Istnieją dwa możliwe powody: Jeden jest związany z wyjątkiem odmowy dostępu, proces mógł usunąć dostęp prawo do innych procesów w celu pozyskania dojścia do procesu, ponieważ w systemie Windows 8 jest zainstalowany program .NET 4.5, który zapewnia nową metodę klasie Proces, można wywołać EnterDebugMode(). To umożliwia SeDebugPrivilege, może być wystarczająco dobre, aby teraz działało Kill().

Drugi to znacznie większy problem, proces może mieć wątek aktywny w trybie jądra, który nie jest zamykany. Najlepszym sposobem na zdiagnozowanie tego jest użycie Menedżera zadań, zakładki Szczegóły, kliknięcie prawym przyciskiem myszy jednego z nagłówków kolumn i wybranie "Wybierz kolumny". Zaznacz "Uchwyty". Sprawdź wyświetlaną wartość procesu. Jeśli zobaczysz wartość niezerową, najprawdopodobniej proces będzie otwarty i oczekuje na sterownik urządzenia, aby wykonać żądanie we/wy. I ten sterownik urządzenia jest inaczej nieprzepuszczalny dla systemu Windows, prosząc go o anulowanie żądania. Zawężenie problemu uciążliwego nie jest takie proste, musisz wiedzieć więcej na temat tego, jakie dokładnie żądania we/wy wykonuje twój proces. Kontynuuj to, zadając pytanie na ten temat na superuser.com

Powiązane problemy