Получение типа (x64 или x86) запущенного процесса в коде макроса vb.net - PullRequest
1 голос
/ 22 января 2010

Я пишу макрос для автоматизации процесса присоединения к рабочему процессу IIS (w3wp.exe, Windows Server 2k8) из Visual Studio. Проблема в том, что я часто запускаю два пула приложений одновременно, один в режиме 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 Ответ

1 голос
/ 22 января 2010

В классе Process недостаточно информации, чтобы вы могли это выяснить. Вы можете получить только ProcessID для процесса. Оттуда вам потребуется P / Invoke OpenProcess (), чтобы получить дескриптор процесса, затем IsWow64Process (), чтобы выяснить, является ли это 32-битным процессом. CloseHandle (), чтобы закрыть дескриптор процесса. На самом деле не уверен, что P / Invoke возможен в макросе. Посетите pinvoke.net, чтобы получить необходимые декларации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...