无法将我的 WiX 自定义操作安排到 msi
Posted
技术标签:
【中文标题】无法将我的 WiX 自定义操作安排到 msi【英文标题】:Unable to schedule my WiX Custom Action into the msi 【发布时间】:2015-07-23 21:18:30 【问题描述】:我在 Visual Studio 中有一个安装程序解决方案,其中包含 C# Windows 应用程序引导程序和两个 msi 项目。我想为两个 msis 之一安排一个自定义操作以在卸载序列期间运行 - 所以我首先将一个 CustomActions 项目添加到同一个解决方案(称为“CustomActions”)中,该解决方案具有定义自定义功能的 CustomAction.cs 文件被安排。这个函数现在应该只是在日志文件中写入一些内容:
namespace CustomActions
public class CustomActions
[CustomAction]
public static ActionResult UninstallSecondaryMsi(Session session)
session.Log("Begin CustomAction1");
/* Search for ProductCode of the secondary msi here; run msiexec to uninstall it */
return ActionResult.Success;
我将 CustomActions 项目引用添加到我的 msi 项目中,然后将以下内容添加到我的 product.wxs 中:
<!-- Custom Actions -->
<Fragment>
<Binary Id="customActionDLL" SourceFile="$(var.CustomActions.TargetDir)\CustomActions.CA.dll" />
<CustomAction Id="CustomAction_GetRegistryKey"
BinaryKey="customActionDLL"
DllEntry="UninstallSecondaryMsi"
Execute="immediate"
Return="check" />
<InstallExecuteSequence>
<Custom Action="CustomAction_GetRegistryKey"
After="InstallFinalize"></Custom>
</InstallExecuteSequence>
</Fragment>
我运行了触发 msi 的引导程序,但日志文件中没有“Begin CustomAction1”字符串。我想可能不只是正确记录,但是当我使用 Orca.exe 查看生成的 msi 时,我发现我的自定义操作 没有 安排在 CustomActions 表或 InstallExecuteSequence 表下。 p>
这里有什么我遗漏的吗?我还猜测 CustomActions.CA.dll 的路径不正确,并尝试对 DLL 的路径进行硬编码,但这也不起作用。任何帮助将不胜感激,在此先感谢!
【问题讨论】:
【参考方案1】:啊,我的自定义操作元素在主 Product.wxs 文件中,但在不同的片段中,并且该片段没有在任何地方被引用。我在该 Fragment 下放置了一个 ComponentGroup 并在 Feature 元素下引用了它的 ID - 它起作用了。我很抱歉。
【讨论】:
以上是关于无法将我的 WiX 自定义操作安排到 msi的主要内容,如果未能解决你的问题,请参考以下文章
Wix 自定义卸载操作 - 如何在 msi 删除文件之前运行