2012-11-14 251 views
3

我遇到了Wix自定义操作未执行的问题。即使自定义操作返回ActionResult.Success,安装程序也会不断自动回滚。WiX自定义操作未执行

自定义操作(C#)在维克斯

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

自定义动作定义

<!-- 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

执行'MSIEXEC/I yourinstaller.msi/L log.txt'和寻找输出的'log.txt'文件中产生的任何错误。 –

+0

会相对于安装程序创建日志文件吗? –

+0

日志文件将在执行'msiexec'的目录中创建。也许像'C:\ Users \ Rupert Puxton \ Documents \ Visual Studio 2010 \ Projects \ My Project \ Installer \ bin \ Release',或类似的东西。 –

回答

1

对于任何与WiX苦苦挣扎的人而言,

几点建议:

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

2)如果你正在使用片段和CustomAction元素坐在里面他们,尽量把他们,并把他们产品元素来代替。

3)如果你打算使用延迟执行,你在你的CustomAction试图冒充= “无”属性