2013-08-08 251 views
13

次のコードを実行すると、Access Deniedに対してWin32Exceptionがスローされます。私は検索で解決策を見つけることができません。これをどうやって解決するのですか?Process.Kill()アクセスが拒否されました

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を昇格モードで実行してください。さらに、管理者としても、システムクリティカルなものとみなされるものもありますが、システムとして実行する必要があるかもしれないし、システムでもkillできないものがあります。彼らはしたくないので、アンチウイルス、または実際のウイルスのように、あなたはそれらのプロセスを殺す

別の可能性は、プロセスがすでに終了している場合、それはまた、その例外をスローし、私はこの種を持っていた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

表示されるということです私のアプリケーションは終了していましたが、タスクマネージャのバックグラウンドプロセスに残っていました。 TaskKill(管理者モード、 "/ F"オプション、コマンドラインから試してみました)を使って殺すことはできません。 最後に、私のアプリケーションのDLLに "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を使用する必要があります。 –

関連する問題