2009-04-02 8 views
2

Я пишу VSPackage для Visual Studio 2008 и развертываю его с помощью Msi с WiX. В конце установки я запускаю «devenv.exe/setup», как требуется, чтобы заставить VS заметить мой пакет. Однако эта команда не будет выполнена, если есть какие-либо копии Visual Studio.Как обеспечить, чтобы файл devenv.exe не запускался при установке моего msi

В настоящее время я говорю людям, что перед установкой им нужно закрыть все копии Visual Studio, но я бы предпочел, чтобы он был надежным. Как я могу проверить, когда кто-то запускает мой .msi, если какие-либо копии Visual Studio (devenv.exe) запущены, и заблокировать их от установки моего проекта?

ответ

2

Набор инструментов WiX имеет CloseApps CustomAction, который будет закрывать окна для вас. Он, к сожалению, не запрашивает список, чтобы закрыть все приложения, но код будет разумным местом для начала.

0

Вы можете создать класс установщика в проекте и пусть Перечислим Запущенные процессы

+0

classses Installer скверны. –

2

Ваша лучшая ставка заключается в том, чтобы следовать совету Роба и собрать индивидуальное действие, чтобы проверить, запущен ли процесс. Я бы, наверное, сделал что-то вроде того, как он работает, попытайтесь закрыть, если он все еще работает, заплатите перезагрузку и выполните настройку devenv через раздел реестра RunOnce.

Если это слишком много работы, то немного уродливого взлома должно было бы использовать команду TASKKILL для выхода из приложения. Не уверен, но это лучше, чем ничего.

+0

+1 для не уточнения/F;) – JeffH

3
while(devenvIsRunning()) {} //in main routine of Installer class 

static bool devenvIsRunning() //uses this subroutine 
     { 
      Process[] procList = Process.GetProcesses(); 
      foreach (Process p in procList) 
      { 
       if (p.ProcessName == "devenv") 
       { 
        MessageBox.Show("An instance of Visual Studio is still running.\nPlease close all open instances of Visual Studio before continuing."); 
        return true; 
       } 
      } 
      return false; 
     } 
+0

+1, но было бы неплохо позволить пользователю отменить установку, а не приостанавливать ее до тех пор, пока все деввены не будут закрыты. – JeffH