我无法执行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
无论我做什么,即使自定义操作返回“成功”,也无法完成安装程序。任何帮助表示赞赏。
答案 0 :(得分:1)
对于那些与WiX挣扎并且在这里跌跌撞撞的人。
一些建议:
1)您是否尝试将 Debugger.Launch()添加到CustomAction代码的第一行(即 Return ActionResult.Success; 上方)?如果您没有要求启动调试器的对话框,那么您知道您的WiX脚本没有正确引用您的CA.dll,或者它的调用存在问题。
2)如果您正在使用 Fragments 并且CustomAction元素位于其中,请尝试将它们取出并将它们放在 Product 元素下。
3)如果您要使用延迟执行,您是否在CustomAction中尝试了 Impersonate =&#34; no&#34; 属性