我有两个具有不同功能的应用程序。 其中一个是现有的应用程序,另一个是我有目的地使用相同的名称。
当用户启动它们时,两者的进程名称相同。
使用c#,VS 2010,.Net 2.0 当我使用c#获取进程列表时,我想区分这两者和它们。
目标操作系统:XP / Win 7 / Win 8 / Win 10
答案 0 :(得分:0)
使用他们的流程ID。
private static void Main(string[] args)
{
var procs = Process.GetProcesses();
foreach ( var proc in procs )
{
Console.WriteLine(proc.Id);
}
}
答案 1 :(得分:0)
您可以使用每个流程的MainModule属性来区分版本信息:https://msdn.microsoft.com/en-us/library/system.diagnostics.process.mainmodule%28v=vs.110%29.aspx
答案 2 :(得分:0)
如果您可以找到过程文件位置,则可以确定它是哪个过程。这是一个打印出每个进程路径的小型控制台应用程序。只需更改" 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 "";
}
}