如何关闭正在运行的 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 安装程序之前安排了上面的自定义操作。示例:如果您需要提升安装,只需在您的 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 安装程序?的主要内容,如果未能解决你的问题,请参考以下文章