代码之家  ›  专栏  ›  技术社区  ›  jpobst

如何确保在安装msi时devenv.exe不运行

  •  2
  • jpobst  · 技术社区  · 16 年前

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

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

    4 回复  |  直到 16 年前
        1
  •  2
  •   Rob Mensching    16 年前

    wix工具集有一个closeapps自定义操作,它将为您关闭Windows。不幸的是,它没有用一个列表提示关闭所有的应用程序,但是代码是一个合理的开始位置。

        2
  •  3
  •   muusbolla    16 年前
    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;
            }
    
        3
  •  2
  •   saschabeaumont    16 年前

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

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

    TASKKILL /IM devenv.exe 
    
        4
  •  0
  •   Akash Kava    16 年前

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

    推荐文章