2013-11-15 153 views
4

我正在编写保持活动服务以查看进程是否已启动并正在运行。我有几个进程使用同一个名字,并且运行在不同的工作目录中。ProcessStartInfo.WorkingDirectory属性为空

因此,我想使用WorkingDirectory属性作为唯一标识符。但是,当我询问所有这些属性时,该值是空的。

下面是一些代码:

foreach (Process process in Process.GetProcesses()) 
    if (!string.IsNullOrWhiteSpace(process.StartInfo.WorkingDirectory)) 
     Console.WriteLine("Winning!!!"); 

不用说,我没有中奖。

回答

4

使用Process.MainModuleProcessModule.FileName属性。

foreach (Process process in Process.GetProcesses()) 
{ 
    string executableFilePath = process.MainModule.FileName; 
    string executableDirectory = Path.GetDirectoryName(executableFilePath); 
} 

请注意,一个进程可以随时退出。如果巧合的是在进程退出(或退出)时查询进程的MainModule,则会抛出异常。

+0

完美!谢谢。 –