47777


こんにちは、お世話になります。  
表題の通り、C#でプロセス一覧を取得して、そのフルパスを取得したいと考えています。  
そこで、WMIを利用した方法を試してみたのですが、これだと管理者権限で実行されているプロセスのフルパスは取得できないようで困っています。  
ちなみに、ファイル名のみであれば、取得できることを確認しています。  
とりあえず、試したコードです。

[code]

    System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_Process");
    System.Management.ManagementObjectCollection moc = mc.GetInstances();
    string list = "";
    foreach (System.Management.ManagementObject mo in moc){
    string path = ""+mo["ExecutablePath"];
    list = list+path+"\n";
    mo.Dispose();
    }
    moc.Dispose();
    mc.Dispose();
    MessageBox.Show(list);
    
[/code]

以上、よろしくお願いいたします。


CC BY-SA 4.0
2018-08-24T04:36:33.957
47772
2018-08-24T06:34:35.800
2018-08-24T05:23:58.440
29034
29034
question
c#
C#のプロセス一覧のフルパス取得で管理者権限で実行されているプロセスのフルパスを得る方法


セキュリティ上、保護されているため取得できません。

[`Win32_Process`クラス](https://docs.microsoft.com/en-
us/windows/desktop/cimwin32prov/win32-process)であれば`SeDebugPrivilege`権限が必要と書かれています。この他.NET
Frameworkの`Process`クラスにも[`MainModule`プロパティ](https://docs.microsoft.com/en-
us/dotnet/api/system.diagnostics.process.mainmodule?view=netframework-4.7.2)が存在しますがこちらもアクセスエラーが発生します。Windows
APIの[`CreateToolhelp32Snapshot`関数](https://docs.microsoft.com/en-
us/windows/desktop/api/tlhelp32/nf-
tlhelp32-createtoolhelp32snapshot)はEXEファイル名までは取得できますが、フルパスを含むモジュール一覧を取得する際にはやはりエラーとなります。


CC BY-SA 4.0
2018-08-24T06:34:35.800
47777
2018-08-24T06:34:35.800
4236
47772
answer