从32位应用程序获取64位应用程序的过程信息

时间:2018-09-26 05:30:44

标签: c# windows exception process

我正在使用以下代码从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”体内的参数。
让我知道是否需要更多信息。

1 个答案:

答案 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位应用程序的信息。