我正在编写一个宏来自动化从Visual Studio连接到IIS工作进程(w3wp.exe,Windows Server 2k8)的过程。问题是我经常在任何给定时间运行两个应用程序池,一个在x64模式下,一个在x86模式下。这意味着在任何给定时间都有两个名为w3wp.exe的进程,并且区分它们的唯一方法是它们运行的模式。当我使用“附加到进程”对话框时,有一个“类型”列这显示了这些信息,所以我知道要附加哪个w3wp.exe,但我无法弄清楚如何在我的宏中获取该信息。
根据此处的信息,我能够提出以下信息:
Function AttachToProcess(ByVal processName As String) As Boolean
Dim proc As EnvDTE.Process
Dim attached As Boolean
For Each proc In DTE.Debugger.LocalProcesses
If proc.Name = "w3wp.exe" Then
proc.Attach()
attached = True
End If
Next
Return attached
End Function
但有一半时间这只是抓住了错误的过程。我需要第二个if语句来检查进程的模式/类型。我尽可能地使用快速表来完成课程,但却无法弄清楚信息的位置。有人可以帮忙吗?谢谢!
答案 0 :(得分:1)
Process类中没有足够的信息让你知道。您只能获取该流程的ProcessID。从那里,您必须使用P / Invoke OpenProcess()来获取进程句柄,然后使用IsWow64Process()来查明它是否是32位进程。 CloseHandle()关闭进程句柄。实际上并不确定宏中是否可以进行P / Invoke。访问pinvoke.net以获取您需要的声明。