2

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

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

4

5 回答 5

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;
        }
于 2009-06-05T15:40:22.907 回答
2

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

于 2009-04-02T20:23:54.807 回答
2

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

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

TASKKILL /IM devenv.exe 
于 2009-04-02T22:51:05.030 回答
0

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

于 2009-04-02T16:02:39.647 回答
0

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

于 2020-03-11T06:27:08.263 回答