【问题标题】:How to ensure devenv.exe is not running when my msi is installed安装我的 msi 后如何确保 devenv.exe 未运行
【发布时间】:2020-03-11 14:27:08
【问题描述】:

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

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

【问题讨论】:

    标签: wix windows-installer vsx


    【解决方案1】:
    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 可以为您关闭窗口。不幸的是,它没有提示关闭所有应用程序的列表,但代码将是一个合理的起点。

    【讨论】:

      【解决方案3】:

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

      如果工作量太大,那么使用 Windows 命令TASKKILL 退出应用程序是一种丑陋的黑客行为。不是万无一失,但总比没有好。

      TASKKILL /IM devenv.exe 
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 安装程序类很讨厌。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2010-12-12
          • 1970-01-01
          • 1970-01-01
          • 2011-08-22
          • 1970-01-01
          • 2011-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多