基于条件的回滚安装

时间:2011-11-26 10:26:05

标签: c# installer windows-installer multiple-login

如果在系统中登录了多个用户,通常会正常取消应用程序,它会显示一个消息框

enter image description here

如果用户点击继续,则会发生安装,但可能会出错。我有一个项目安装程序,如果有多个用户登录,我想在其中结束安装过程。所以我在Before_UnInstall事件中写了这个条件:

if(Process.GetProcessesByName("explorer").Count()==1)
{
        //do uinstall
}

else
{
       //do not do unistall
}

我的问题是如何在else部分中停止触发卸载事件?

可能的变更

根据Alexey的回答,我想我会检查过程的不同所有者。我找到了如何使用here

中的WMI查找进程的所有者

1 个答案:

答案 0 :(得分:2)

您不应该自己动手:Windows Installer将负责其他进程锁定的文件。此外,用户拥有多个资源管理器进程是合法的,因此在这种情况下您的代码将拒绝卸载,但只有一个用户登录。我怀疑你可以检测来自其他用户的进程,除非你提升了这段代码。

您真正想要检查的是您卸载的应用程序是否在任何用户帐户下运行。如果计算机的其他用户没有运行您的应用程序,则通常可以安全地继续运行。