如何关闭正在运行的 wix 安装程序?

Posted

技术标签:

【中文标题】如何关闭正在运行的 wix 安装程序?【英文标题】:How to close running wix installer? 【发布时间】:2016-08-10 12:38:13 【问题描述】:

我已经为 C 驱动器中的传送文件创建了 wix 安装程序。当我运行 .msi 文件时,我尝试在文件传送之前调用一个自定义操作。在自定义操作中,我使用了以下代码。

自定义操作代码:

            bool isElevated;
            WindowsIdentity identity = WindowsIdentity.GetCurrent();
            WindowsPrincipal principal = new WindowsPrincipal(identity);
            isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
            if (!isElevated)
            
                DialogResult dialogResult = MessageBox.Show("CustomAction is not running admode , so please refer online ?", "Admin Alert ", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                
                    Process.Start("Same Web site link");
                    Environment.Exit(0);
                
                else if (dialogResult == DialogResult.No)
                
                    Environment.Exit(0);
                
            

以上自定义操作工作正常。如果自定义操作未成功运行管理模式,则会显示消息框。如果我在消息框中未选择任何选项 wix 安装程序已关闭,但文件已发送。所以请告诉我,如何使用 C# 停止 wix 安装程序?

【问题讨论】:

您何时安排此自定义操作? 嗨,Brian,我在 msi 安装程序之前安排了上面的自定义操作。示例:未安装 【参考方案1】:

如果您需要提升安装,只需在您的 WiX 中说 InstallPrivileges = 提升。无需编写代码来检查它。或者在执行序列中检查 Privileged 属性的状态: https://msdn.microsoft.com/en-us/library/windows/desktop/aa370852(v=vs.85).aspx

如果您希望自定义操作以提升的方式运行,则它必须在执行序列中并标记为 deferred 并且 noimpersonate=true 并且包具有 InstallScope=perMachine。

因此,您可以安排升级安装,根本无需进行任何检查,也无需阻止安装。或者,如果您需要管理员进行安装,则可以使用 AdminUser 属性和 MSIUSEREALADMINDETECTION 的选项:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa367545(v=vs.85).aspx

如文档所述,您将在源代码中声明 MSIUSEREALADMINDETECTION 的值为 1。使用 Privileged 属性作为启动条件。除非用户是管理员,否则设置将不会开始。但是这里的第二条准则:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368772(v=vs.85).aspx

建议改为类型 19 的自定义操作来检查 Privileged 是否已设置:

这里有一个例子,向下滚动:

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Help-on-type-19-custom-action-td712797.html

但是,如果您需要提升安装,请在您的 Package 元素中使用 InstallPriviges=elevated。

【讨论】:

请分享一些例子 嗨,PhilDW,我用过你的 cmets。不适合我,请分享一些样本。

以上是关于如何关闭正在运行的 wix 安装程序?的主要内容,如果未能解决你的问题,请参考以下文章

在卸载期间提示用户关闭应用程序(在 WiX 中)

如何在关闭对话框的 Wix 安装程序中停止自定义操作中的进度条

Wix - 如何从安装目录安装后运行exe文件?

在使用 wix 卸载之前关闭系统托盘应用程序

如何使用 WiX 安装程序更改添加/删除程序名称?

如何让 WiX 安装程序请求管理权限?