3

我无法执行 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

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

4

1 回答 1

2

对于任何与 WiX 苦苦挣扎并在这里偶然发现的人。

一些建议:

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

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

3)如果您要使用延迟执行,您是否在您的 CustomAction 中尝试过Impersonate="no"属性

于 2017-06-27T13:43:14.377 回答