我正在为Visual Studio 2008编写VSPackage,并使用WiX生成的Msi进行部署。在安装结束时,我根据需要运行“devenv.exe / setup”以让VS注意到我的包。但是,如果有任何Visual Studio运行副本,则此命令将不会成功。
目前,我告诉人们在安装之前必须关闭Visual Studio的所有副本,但我更希望它是万无一失的。如果有任何Visual Studio(devenv.exe)副本正在运行,我如何检查有人运行我的.msi,并阻止他们安装我的项目?
答案 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必须以管理员身份运行