卸载时WIX自定义操作失败

时间:2014-04-02 15:06:27

标签: c# wix

我是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#Custom Action类中,在安装时调用的自定义操作可以正常工作。当我尝试卸载应用程序时,出现以下错误:

  

此Windows Installer程序包存在问题。需要一个DLL   为此安装完成无法运行。联系您的支持   人员或包装供应商。

所以在我看来,一些DLL在被初始化之前被调用,并且错误可能在执行序列中的某处。

任何帮助将不胜感激。

此致

1 个答案:

答案 0 :(得分:0)

记录安装并查看自定义操作是否存在堆栈转储。

顺便说一下,这里有一些代码味道。你的“注册程序集”究竟做了什么?你可能正在重新发明轮子。自定义操作计划立即执行(其中一个在InstallFinalize之后的安装事务之外),没有任何回滚或提交功能,并且安装程序不会在UAC环境中提升。