获取vb.net宏代码中正在运行的进程的类型(x64或x86)

时间:2010-01-22 16:00:27

标签: vb.net macros debugging

我正在编写一个宏来自动化从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语句来检查进程的模式/类型。我尽可能地使用快速表来完成课程,但却无法弄清楚信息的位置。有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:1)

Process类中没有足够的信息让你知道。您只能获取该流程的ProcessID。从那里,您必须使用P / Invoke OpenProcess()来获取进程句柄,然后使用IsWow64Process()来查明它是否是32位进程。 CloseHandle()关闭进程句柄。实际上并不确定宏中是否可以进行P / Invoke。访问pinvoke.net以获取您需要的声明。