Как убедиться, что devenv.exe не работает, когда у меня установлена ​​MSI - PullRequest
2 голосов
/ 02 апреля 2009

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

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

Ответы [ 4 ]

3 голосов
/ 05 июня 2009
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;
        }
2 голосов
/ 03 апреля 2009

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

2 голосов
/ 03 апреля 2009

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

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

TASKKILL /IM devenv.exe 
0 голосов
/ 02 апреля 2009

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

...