代码之家  ›  专栏  ›  技术社区  ›  Chris Clark

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

  •  1
  • Chris Clark  · 技术社区  · 15 年前

    我正在编写一个宏来自动从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语句来检查进程的模式/类型。我已经尽我所能用QuickWatch快速浏览了所有的课程,但还不能确定信息在哪里。有人能帮忙吗?谢谢!

    1 回复  |  直到 15 年前
        1
  •  1
  •   Hans Passant    15 年前

    流程类中的信息不足,无法让您了解。只能获取进程的processID。从那里,您需要p/invoke openprocess()来获取进程句柄,然后isww64process()来确定它是否是32位进程。closeHandle()关闭进程句柄。实际上不确定宏中是否可以使用p/invoke。访问pinvoke.net获取您需要的声明。