安装我的msi时如何确保devenv.exe没有运行

时间:2009-04-02 15:53:36

标签: wix windows-installer vsx

我正在为Visual Studio 2008编写VSPackage,并使用WiX生成的Msi进行部署。在安装结束时,我根据需要运行“devenv.exe / setup”以让VS注意到我的包。但是,如果有任何Visual Studio运行副本,则此命令将不会成功。

目前,我告诉人们在安装之前必须关闭Visual Studio的所有副本,但我更希望它是万无一失的。如果有任何Visual Studio(devenv.exe)副本正在运行,我如何检查有人运行我的.msi,并阻止他们安装我的项目?

5 个答案:

答案 0 :(得分: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;
        }

答案 1 :(得分:2)

WiX工具集有一个CloseApps CustomAction,可以为您关闭窗口。它不幸地没有用列表提示关闭所有应用程序,但代码是一个合理的起点。

答案 2 :(得分:2)

您最好的选择是遵循Rob的建议并整理一个自定义操作以检查进程是否正在运行。我可能会做一些事情,比如看它是否正在运行,尝试关闭,如果它仍然在运行,那么安排重新启动并执行devenv设置 通过RunOnce注册表项。

如果这工作太多,那么有点丑陋的黑客就是使用windows命令TASKKILL来退出应用程序。不是万无一失,但总比没有好。

TASKKILL /IM devenv.exe 

答案 3 :(得分:0)

您可以在项目中创建一个安装程序类,并让它枚举正在运行的进程

答案 4 :(得分:0)

我必须使用TASKKILL / IM devenv.exe -F终止进程,而cmd必须以管理员身份运行