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 自定义卸载操作失败的主要内容,如果未能解决你的问题,请参考以下文章

WiX - 带有安装和卸载(或回滚)参数的多个自定义操作

如何在 WiX 中执行仅在安装或卸载时执行的自定义操作?

在卸载期间显示来自 C# 自定义操作的 WiX 对话框

Wix Remove 自定义操作失败

WIX 自定义操作执行失败

修改数据库时 WiX 工具集自定义操作失败