1

我正在寻找一种列出每个进程的应用程序名称的方法。当您在 Visual Studio 中制作项目时,项目名称之类的。

我不是在寻找什么:

  1. 窗口标题
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
    if (!String.IsNullOrEmpty(p.MainWindowTitle))
    {
        Console.WriteLine(p.MainWindowTitle);
    }
}
  1. 进程名称
Process[] processes = Process.GetProcesses();
foreach (Process p in processes)
{
    Console.WriteLine(p.ProcessName);
}

我在找什么:

任务管理器列表中的条目:

任务管理器列表

4

1 回答 1

0

虽然 p.MainModule 抛出一些进程(调查它),

你需要的可以这样实现:

    Process p = Process.GetProcessesByName("winword")[0];
    string fileName = p.MainModule.FileName;

    FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(fileName);

    // Writes "Microsoft Word"
    Console.Write(myFileVersionInfo.FileDescription);

编辑1:

如果您在 64 位环境中以 32 位运行,似乎 p.MainModule 无法访问。

当编译为 x64 时,可以显示在我的系统上与我的用户一起运行的所有进程。对于其他人,可能需要海拔。

Failed: svchost, Reason: Access is denied
Succeeded: chrome = Google Chrome
Failed: sqlservr, Reason: Access is denied
Succeeded: SCNotification = SCNotification
Succeeded: VirtualMIDISynth = CoolSoft VirtualMIDISynth
Failed: NisSrv, Reason: Access is denied
Failed: TabTip32, Reason: Access is denied
Failed: RegSrvc, Reason: Access is denied
Failed: dwm, Reason: Access is denied
Failed: LMS, Reason: Access is denied
Failed: svchost, Reason: Access is denied
Succeeded: chrome = Google Chrome
Failed: EvtEng, Reason: Access is denied
Succeeded: OmniSharp = OmniSharp
Failed: taskhost, Reason: Access is denied
Failed: svchost, Reason: Access is denied
Succeeded: Code = Visual Studio Code
Succeeded: devenv = Microsoft Visual Studio 2013
Succeeded: ChsIME = Microsoft IME
Failed: SppExtComObj, Reason: Access is denied
Failed: svchost, Reason: Access is denied
Failed: WmiPrvSE, Reason: Access is denied
Succeeded: Code = Visual Studio Code
Failed: isa, Reason: Access is denied
Succeeded: conhost = Console Window Host
于 2020-04-01T20:54:00.083 回答