2013-08-08 2 views
13

다음 코드를 실행하면 Access Denied에 대해 Win32Exception이 throw됩니다. 검색을 통해 해결책을 찾을 수 없습니다. 이 문제를 어떻게 해결할 수 있습니까?Process.Kill() Access Denied

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

그럼 어떤 과정이 죽이려고? – Arran

+0

시도한 모든 프로세스 또는 특정 프로세스에 대해 예외가 발생합니까? –

+0

@SriramSakthivel 모든 프로세스 http://screenshu.com/static/uploads/temporary/a7/1c/gg/1no2yr.jpg – Ezzy

답변

8

필요한 권한이없는 경우 일반적으로이 오류가 발생합니다. 당신은 관리자 여야하며 win vista 이상에서는 상승 모드로 app/process를 실행하십시오. 또한, 심지어 관리자로서 당신도 죽일 수 없으며, 일부 시스템은 치명적인 것으로 간주하고, 시스템으로 실행해야 할 수도있는 프로세스가 있습니다. 그런 다음 시스템도 죽일 수없는 프로세스가 있습니다. 그들이 원하는하지 않기 때문에 바이러스, 또는 실제 바이러스처럼, 당신은 그 과정을 죽이는

또 다른 가능성은 프로세스가 이미 종료 된 경우, 또한 그 예외를 던져 내가 이런 종류의했다 MSDN

+1

내 응용 프로그램이 관리 모드에서 실행됩니다. 그리고 Spotify 등의 프로세스를 죽이려고합니다. – Ezzy

+0

당신은 앱 외부에서 그것을 죽이려고 했습니까? pskill, http://technet.microsoft.com/en-us/sysinternals/bb896683.aspx를 다운로드하고 가능한 경우 해당 응용 프로그램을 사용하여 해당 응용 프로그램을 종료 할 수 있는지 확인한 다음 응용 프로그램에 문제가있는 것입니다 (실행하지 않음). 당신은'p'에서 잘못된 프로세스를 얻었습니까?), 상승 된 모드에서 ** cmd promp를 실행 ** 한 다음 상승 된 cmd 프롬프트에서 pskill을 호출하십시오 – Jason

+0

이 코드로 spotify를 죽이려고했습니다 : '//foreach (Process.GetProcessesByName ("spotify")의 proc 프로세스) // { // proc.Kill(); //} ' 그리고 제대로 작동했습니다. 원본 코드가 작동하지 않는 것 같습니다. 나는 그 다음 하나를 봐야 할 것이다. 이제는 적어도 관리자 권한 문제를 해결할 수 있습니다. – Ezzy

2

볼 것입니다 Windows 8.1에서 델파이 응용 프로그램 문제가 발생했습니다. 응용 프로그램이 닫히지 만 여전히 작업 관리자의 백그라운드 프로세스에있었습니다. TaskKill로 죽일 수 없습니다. (명령 줄에서 "/ F"옵션을 사용하여 관리자 모드를 시도했습니다 ...) 마지막으로 Windows에서 "IgnoreFreeLibrary"로 내 응용 프로그램의 DLL을 "표시"한다는 사실을 알았습니다. 그 이유는 내 신청서가 닫히지 않았기 때문입니다.

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

내가 레지스트리 항목을 삭제하고 모든 것이 정상으로 돌아였다 다음은 레지스트리의 추출물이다.

-1

나는 같은 문제를 가지고 문제를 해결하기 위해이 코드를 사용 :

[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

이이 질문과 관련하여 답변을 제공합니까? –

+0

확실! p.Kill(); win32Exception을 주므로 user32.dll을 사용하여 다른 프로그램이나 어셈블리의 창을 닫아야합니다. –