23

次のコードを実行すると、アクセスが拒否されたために Win32Exception がスローされます。検索で解決策が見つかりません。これを修正するにはどうすればよいですか?

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

5 に答える 5

14

通常、必要な権限がない場合、このエラーが発生します。管理者である必要があり、win vista 以降では、アプリ/プロセスを昇格モードで実行します。さらに、管理者であっても強制終了できない特定のプロセス、システム クリティカルと見なされるプロセスなどがあります。また、systemとして実行する必要がある場合があります。また、ウイルス対策のように、システムでも強制終了できないプロセスがあります。 、または実際のウイルス、プロセスを強制終了させたくないため

もう 1 つの可能性は、プロセスが既に終了している場合、その例外もスローされることです。MSDNを参照してください。

于 2013-08-08T15:14:12.140 に答える
4

Windows 8.1 の Delphi アプリケーションで、このような問題が発生しました。アプリケーションは閉じていましたが、まだタスク マネージャのバックグラウンド プロセスにありました。TaskKill でそれを強制終了することはできません (コマンド ラインから管理者モード、「/F」オプションを試しました...) 最後に、Windows がアプリケーションの DLL を「IgnoreFreeLibrary」として「マーク」していることがわかりました。それが私のアプリケーションが閉じられなかった理由です。レジストリの抜粋は次のとおりです。

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

レジストリエントリを消去したところ、すべてが正常に戻りました。

于 2014-04-21T21:07:44.673 に答える