2012-12-26 33 views
10

Tôi đã cài đặt Windows 8 khoảng một tháng trước và đã gặp sự cố khi quá trình treo cứng tôi không thể kết thúc/xóa nó. Cả người quản lý tác vụ lẫn CMD Taskkill/f/PID #### đều không thực hiện được công việc, vì vậy tôi nghĩ rằng tôi sẽ viết ra kẻ giết người quá trình của riêng mình trong C# và xem những vấn đề gì xảy ra.Quá trình xóa (windows 8)

Sau khi viết lên một ứng dụng nhỏ, tôi nhận ra rằng tôi không thông minh như tôi nghĩ - Tôi vẫn không thể kết thúc quá trình. Lúc đầu, tôi đã có thể tìm thấy quá trình theo tên/PID:

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

..và đã nhận được "Truy cập bị từ chối" ngoại lệ khi tôi cố gắng:

process.Kill(); 

..after một vài lần mà đã thay đổi và tôi sẽ không thể tìm thấy quy trình nữa. Ví dụ. khi tôi cố gắng tìm nó bằng tên hoặc PID không có gì được trả lại, trong khi quá trình vẫn còn trong Task Manager và trên màn hình của tôi.

Tôi cũng đã đọc lên trên Process @MSDN và nó nói rằng "Access Denied" có thể được ném nếu quá trình này đã được chấm dứt hay không có thể được chấm dứt .. :(

Trợ giúp? Có thực sự không có cách nào Để kết thúc quá trình FORCE?

+0

bạn có thử dùng quá trình stop-powerhell không? – tschmit007

Trả lời

11

Vâng, về cơ bản bạn đang chạy vào cùng một vấn đề ngăn Trình quản lý tác vụ chấm dứt quá trình. Có hai lý do có thể xảy ra. với các quy trình khác để có được một xử lý cho quá trình này Vì bạn đang chạy trên Windows 8, bạn đã cài đặt .NET 4.5. Cung cấp một phương thức mới cho lớp Process, bạn có thể gọi EnterDebugMode(). Điều đó cho phép SeDebugPrivilege, có thể đủ tốt để thực hiện công việc Kill().

Khác là một vấn đề lớn hơn nhiều, quá trình có thể có một chuỗi hoạt động trong chế độ hạt nhân mà không phải là thoát. Cách tốt nhất để chẩn đoán đó là bằng cách sử dụng Trình quản lý tác vụ, tab Chi tiết, nhấp chuột phải vào một trong các tiêu đề cột và chọn "Chọn cột". Chọn "Xử lý". Nhìn vào giá trị hiển thị cho quá trình. Nếu bạn thấy giá trị khác 0 thì quá trình này rất có khả năng mở một tay cầm và đang chờ trình điều khiển thiết bị thực hiện yêu cầu I/O. Và trình điều khiển thiết bị đó là không thấm vào Windows yêu cầu nó hủy yêu cầu. Thu hẹp những kẻ gây rối không phải là dễ dàng, bạn phải biết thêm về chính xác loại I/O yêu cầu quá trình của bạn thực hiện. Theo dõi vấn đề này bằng cách đặt câu hỏi về nó tại superuser.com