如何确定某个特定进程是否正在运行WPF应用程序?
在Snoop中,作者使用下面的代码来检查这个条件〜
foreach (ProcessModule module in process.Modules)
{
if (module.ModuleName.Contains("PresentationFramework.dll") ||
module.ModuleName.Contains("PresentationFramework.ni.dll"))
{
isValid = true;
break;
}
}
答案 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时进入)。
你能详细说明你认为这不起作用的原因吗?