WIX 自定义卸载操作失败
Posted
技术标签:
【中文标题】WIX 自定义卸载操作失败【英文标题】:WIX Custom Action On Uninstall Fails 【发布时间】:2014-04-02 15:06:26 【问题描述】:我是 WIX 新手,请多多包涵。
我的安装过程中有两个自定义操作,一个在安装 .msi 期间调用,另一个在卸载 .msi 期间调用。
<Binary Id="ClassExtension.RegisterAssemblies.CA.dll" src="..\ClassExtension.RegisterAssemblies\bin\$(var.Configuration)\ClassExtension.RegisterAssemblies.CA.dll" />
<CustomAction Id="CustomActionInstall"
Return="check"
Execute="immediate"
BinaryKey="ClassExtension.RegisterAssemblies.CA.dll"
DllEntry="OnInstall" />
<CustomAction Id="CustomActionUninstall"
Return="check"
Execute="immediate"
BinaryKey="ClassExtension.RegisterAssemblies.CA.dll"
DllEntry="OnUninstall" />
<InstallExecuteSequence>
<Custom Action="CustomActionInstall" After="InstallFinalize" />
<Custom Action='CustomActionUninstall' After="InstallInitialize">REMOVE="ALL"</Custom>
</InstallExecuteSequence>
自定义操作方法如下:
[CustomAction]
public static ActionResult OnInstall(Session session)
//Code
[CustomAction]
public static ActionResult OnUninstall(Session session)
//Code
自定义操作驻留在单独的 C# 自定义操作类中,安装时调用的自定义操作可以正常工作。当我尝试卸载应用程序时,出现以下错误:
此 Windows 安装程序包有问题。需要 DLL 无法运行此安装完成。联系您的支持 人员或包裹供应商。
所以在我看来,某些 DLL 在初始化之前就被调用了,而且错误可能在执行序列中的某个地方。
任何帮助将不胜感激。
问候
【问题讨论】:
如果这是注册程序集的自定义操作,wix 中有本地方式来执行此操作。我不确定自定义操作到底做了什么,但只是想我会提到它。我已经用原生 wix 功能替换了 regasm 和 regsvr32 命令。 【参考方案1】:记录安装并查看自定义操作是否存在堆栈转储。
顺便说一句,这里有一些代码味道。您的“注册程序集”到底是做什么的?您可能正在重新发明***。自定义操作计划立即执行(其中一个在 InstallFinalize 之后的安装事务之外),没有任何回滚或提交功能,并且不会被 UAC 环境中的安装程序提升。
【讨论】:
类的名称可能会产生误导,此安装程序对特定的软件应用程序使用自定义的组装注册过程。它的工作方式与普通程序集注册不同,因为它是在自定义数据库文件中完成的,而不是在注册表中。 我的所有其他顾虑仍然适用。您还应该记录卸载并查找来自自定义操作的错误。以上是关于WIX 自定义卸载操作失败的主要内容,如果未能解决你的问题,请参考以下文章