WiX自定义操作未执行

时间:2012-11-14 21:17:45

标签: c# installer wix custom-action

我无法执行Wix自定义操作。即使自定义操作返回ActionResult.Success,安装程序也会不断回滚。

自定义操作(C#)

[CustomAction]
public static ActionResult SetPermissionsToAppDataFolder(Session session)
{
    return ActionResult.Success;
}

Wix中的自定义操作定义

<!-- Custom Action -->
<Binary Id="CustomActionLibrary" SourceFile="$(var.CustomActionFolder)InstallerCustomActions.CA.dll" />
<CustomAction Id="CustomActionInstallDirectoryPermission"
              BinaryKey="CustomActionLibrary"
              DllEntry="SetPermissionsToAppDataFolder"
              Execute="deferred"
              Return="check" />

安装调用自定义操作的序列

<!-- Install Sequences -->
<InstallExecuteSequence>
        <Custom Action="CustomActionInstallDirectoryPermission" Before="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>

安装程序编译正常,因此找到自定义操作库文件没有问题。问题是安装程序在回滚之前进入安装的最后阶段。当我们在安装顺序中删除对自定义操作的调用时,安装程​​序将完成。

根据我的理解,自定义操作CA.dll嵌入到最终安装程序中。最初我认为CA.dll需要与安装程序一起分发,但后来发现安装程序将其编译成最终的.msi。

我使用在以下位置找到的代码“连接”自定义操作库: http://www.codeproject.com/Articles/132918/Creating-Custom-Action-for-WIX-Written-in-Managed

无论我做什么,即使自定义操作返回“成功”,也无法完成安装程序。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

对于那些与WiX挣扎并且在这里跌跌撞撞的人。

一些建议:

1)您是否尝试将 Debugger.Launch()添加到CustomAction代码的第一行(即 Return ActionResult.Success; 上方)?如果您没有要求启动调试器的对话框,那么您知道您的WiX脚本没有正确引用您的CA.dll,或者它的调用存在问题。

2)如果您正在使用 Fragments 并且CustomAction元素位于其中,请尝试将它们取出并将它们放在 Product 元素下。

3)如果您要使用延迟执行,您是否在CustomAction中尝试了 Impersonate =&#34; no&#34; 属性