如何确定特定进程是否正在运行WPF应用程序?

时间:2009-09-12 17:37:53

标签: wpf process

如何确定某个特定进程是否正在运行WPF应用程序?

在Snoop中,作者使用下面的代码来检查这个条件〜

foreach (ProcessModule module in process.Modules)
{
     if (module.ModuleName.Contains("PresentationFramework.dll") ||
        module.ModuleName.Contains("PresentationFramework.ni.dll"))
    {
       isValid = true;
        break;
     }
}

2 个答案:

答案 0 :(得分:3)

显然,32位进程无法枚举64位进程的模块。它引发了以下Win32Exception:

  

只完成了ReadProcessMemory或WriteProcessMemory请求的一部分

这可能是Process类的限制,必须有一种方法可以使用API​​方法...

如果进程也是64位,同样的工作正常......

关于Snoop,没有可供下载的64位版本,但由于源代码也可用,您可以将其编译为x64

编辑:如果您的进程是64位且正在运行的WPF应用程序是32位,则Process.Modules似乎也不包含PresentationFramework ...

System.Diagnostics.ProcessModule (TheWPFApp.exe)
System.Diagnostics.ProcessModule (ntdll.dll)
System.Diagnostics.ProcessModule (wow64.dll)
System.Diagnostics.ProcessModule (wow64win.dll)
System.Diagnostics.ProcessModule (wow64cpu.dll)

答案 1 :(得分:2)

我刚刚在64位Vista上测试过它,效果很好。 WPF进程包含来自本机映像文件夹的PresentationFramework.ni.dll(程序集在它们被ngen'd时进入)。

你能详细说明你认为这不起作用的原因吗?