我正在尝试通过流程的执行路径获取流程ID。为此,我正在执行下面的Powershell命令,该命令可以在Powershell的控制台中完美运行:
(Get-Process | Where-Object {$_.Path -eq 'C:\WINDOWS\system32\winlogon.exe'}).Id
但是通过C#执行相同操作不会产生任何结果。以下是我关注的代码段:
string cmd = "(Get-Process | Where-Object {{$_.Path -eq '{0}'}}).Id";
string path = @"C:\WINDOWS\system32\winlogon.exe";
string finalCmd = string.Format(cmd, System.IO.Path.GetFullPath(path));
powershell.Runspace = runspace;
powershell.AddScript(finalCmd);
var result = powershell.Invoke();
我正在使用双括号大括号来表示转义序列。但是powershell.Invoke()
仍然只返回null。还有其他方法来获取带有其可执行路径的进程ID吗?
我的最终目标是我应该能够通过Active Directory(与x86 / x64无关)将应用程序(MSI安装程序)推送到网络中的所有PC,并且应该获得给定可执行路径的进程ID。感谢您的建议,但就我而言,我需要一个通用的解决方案,该解决方案对于x86和x64都可以无缝使用。
答案 0 :(得分:0)
您似乎不需要在这里使用Powershell。 .NET代码可以直接查询进程。
类似的东西:
Process.GetProcesses().Where(p=>p.MainModule.FileName==path)
应该为您返回所有匹配进程的枚举,您可以从中轻松检索其ID。并确定如果发现不止一个怎么办!