如何通过完全不同的 Windows 表单应用程序来区分具有相同名称 运行 的多个进程?

How to distinguish multiple processes with same name run by totally different Windows forms applications?

我有两个功能不同的应用程序。 其中一个是现有的应用程序,另一个是我有意制作的同名应用程序。

当它们由用户启动时,两者的进程名称相同。

使用 c#、VS 2010、.Net 2.0 我想在使用c#获取进程列表的时候区分这两者和他们

目标OS:XP/Win 7/Win 8/Win 10

使用他们的进程 ID。

private static void Main(string[] args)
{
    var procs = Process.GetProcesses();
    foreach ( var proc in procs )
    {
        Console.WriteLine(proc.Id);
    }
}

您可以使用每个进程的 MainModule 属性 通过版本信息来区分它们:https://msdn.microsoft.com/en-us/library/system.diagnostics.process.mainmodule%28v=vs.110%29.aspx

如果您能找到进程文件位置,您就可以确定它是哪个进程。这是一个打印出每个进程路径的小型控制台应用程序。只需将 "MyProcessName" 更改为您的进程名称。您必须添加对 System.Management 的引用并包含 System.Diagnostics 和 System.Management.

我发现 MainModule 属性 不能很好地工作,因为只有 32 位可以读取 32 位程序,反之亦然可以读取 64 位程序

class Program
{
    static void Main(string[] args)
    {
        var Processes = Process.GetProcesses();
        foreach(var proc in Processes)
        {
            if(proc.ProcessName=="MyProcessName")
            Console.WriteLine(ProcessExecutablePath(proc));
        }
        Console.ReadKey();
    }
    static private string ProcessExecutablePath(Process process)
    {
        try
        {
            return process.MainModule.FileName;
        }
        catch
        {
            string query = "SELECT ExecutablePath, ProcessID FROM Win32_Process";
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);

            foreach (ManagementObject item in searcher.Get())
            {
                object id = item["ProcessID"];
                object path = item["ExecutablePath"];

                if (path != null && id.ToString() == process.Id.ToString())
                {
                    return path.ToString();
                }
            }
        }

        return "";
    }
}