2013-08-08 61 views
13

Khi tôi chạy mã sau, một Win32Exception được ném cho Truy cập bị từ chối. Tôi không thể tìm thấy bất kỳ giải pháp nào thông qua tìm kiếm. Làm thế nào để sửa lỗi này?Process.Kill() Truy cập bị từ chối

foreach (ListViewItem list in showprocesses.SelectedItems) 
{ 
    Process p = System.Diagnostics.Process.GetProcessById(Convert.ToInt32(list.Tag)); 
    if (p != null) 
     p.Kill(); 
} 
+0

Vâng những gì quá trình là nó cố gắng để giết? – Arran

+0

Bạn có ngoại lệ cho tất cả các quy trình bạn thử hoặc một số quy trình cụ thể? –

+0

@SriramSakthivel Bất kỳ quy trình nào http://screenshu.com/static/uploads/temporary/a7/1c/gg/1no2yr.jpg – Ezzy

Trả lời

8

Thông thường, bạn sẽ gặp lỗi này nếu bạn không có các quyền cần thiết. Bạn phải là quản trị viên và trong win vista trở lên, hãy chạy ứng dụng/quy trình của bạn ở chế độ nâng cao. Hơn nữa, có một số quy trình mà ngay cả khi quản trị bạn sẽ không thể giết, một số hệ thống được coi là quan trọng, v.v. và bạn có thể cần chạy như hệ thống, và sau đó có những hệ thống thậm chí không thể giết, như chống virus, hoặc một virus thực tế, bởi vì họ không muốn bạn giết chết quá trình của họ

một khả năng khác là nếu quá trình này đã được chấm dứt, nó cũng sẽ ném ngoại lệ đó, xem MSDN

+1

Ứng dụng của tôi đang chạy ở chế độ Quản trị. Và tôi cố gắng giết các quy trình như Spotify, v.v. – Ezzy

+0

bạn đã thử giết nó bên ngoài ứng dụng của mình chưa? hãy thử tải xuống pskill, http://technet.microsoft.com/en-us/sysinternals/bb896683.aspx và xem bạn có thể giết nó bằng ứng dụng đó hay không, nếu có thể, thì có điều gì đó không ổn với ứng dụng của bạn (không chạy Trong chế độ nâng cao? bạn đã nhận được quá trình sai trong 'p'?), hãy nhớ chạy ** cmd promp ở chế độ nâng ** sau đó gọi pskill từ dấu nhắc cmd nâng cao – Jason

+0

Tôi đã cố gắng tiêu diệt spotify bằng mã này: '//foreach (Quy trình proc trong Process.GetProcessesByName ("spotify")) // { // proc.Kill(); //} ' Và nó hoạt động tốt. Có vẻ như mã ban đầu của tôi không hoạt động. Tôi sẽ phải xem xét cái đó sau đó. Bây giờ tôi có thể ít nhất là quản trị các vấn đề về quyền Admin. – Ezzy

2

tôi đã loại các vấn đề với ứng dụng Delphi Trong Windows 8.1 Ứng dụng của tôi đã đóng, nhưng vẫn đang trong quá trình nền của trình quản lý tác vụ. Không thể xóa nó bằng TaskKill (đã thử chế độ quản trị, "/ F", từ dòng lệnh ...) Cuối cùng tôi phát hiện ra rằng Windows "đánh dấu" một DLL của ứng dụng của tôi là "IgnoreFreeLibrary". Đó là lý do tại sao đơn của tôi không đóng. Đây là trích xuất của sổ đăng ký:

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"{MyApplicationPathAndExeName}"="$ IgnoreFreeLibrary<DllWithProblemName.Dll>" 

Tôi đã xóa mục đăng ký và mọi thứ đã trở lại bình thường.

-1

tôi đã cùng một vấn đề và sử dụng các mã số để giải quyết vấn đề:

[DllImport("user32.dll")] 
    public static extern int FindWindow(string ClassName, string WindowName); 

    [DllImport("user32.dll")] 
    public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); 

    public const int WM_SYSCOMMAND = 0x0112; 
    public const int SC_CLOSE = 0xF060; 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     int HWND = FindWindow(null, "My Window");//window title 

     SendMessage(HWND, WM_SYSCOMMAND, SC_CLOSE, 0); 
    } 
+0

là câu trả lời của bạn liên quan đến câu hỏi này? –

+0

chắc chắn! p.Kill(); cung cấp cho bạn một win32Exception, do đó, u cần phải sử dụng user32.dll để đóng cửa sổ của các chương trình hoặc hội đồng khác. –