我正在使用以下代码从32位应用程序中获取过程信息。
var process = Process.GetProcessById((int)processID);
if (process != null && process.MainModule != null && process.MainModule.FileVersionInfo != null)
{
windowInfo.CompanyName = process.MainModule.FileVersionInfo.CompanyName;
windowInfo.FileDescription = process.MainModule.FileVersionInfo.FileDescription;
windowInfo.FileName = process.MainModule.FileVersionInfo.FileName;
windowInfo.FileVersion = process.MainModule.FileVersionInfo.FileVersion;
windowInfo.ProductName = process.MainModule.FileVersionInfo.ProductName;
windowInfo.ProductVersion = process.MainModule.FileVersionInfo.ProductVersion;
}
当我为64位进程查询相同内容时,它将抛出Win32Exception
。我按照this post中给出的解决方案在独立的应用程序中尝试了相同的方法,当我将应用程序更改为64位时,它可以正常工作。我无法在主应用程序中执行相同操作。
有人可以解决此问题吗?我只想查询“ if”体内的参数。
让我知道是否需要更多信息。
答案 0 :(得分:0)
此解决方案对我有用: Get x64 process mainmodule location from an x86 application?
我只是使用了WMI查询中的相关信息:
var inBoth = employee
.Departments
.Intersect(list);
foreach (var depart in inBoth)
depart.Name += " employee have this list item";
即使从32位应用程序触发,返回的数组也将包含64位应用程序的信息。