WiX:将属性传递给自定义操作,已经看过SO,*仍然*不工作:(

时间:2013-02-13 15:56:39

标签: properties wix custom-action

我做错了什么?

请问,如果您的回答是我应该使用内置服务在WiX中安装内容,请不要打扰回答。它对我来说效果不好 我不想将XSLT转换应用到我的HEATed .wxs文件。

根据我的日志,它正在执行两个自定义操作,但InstallAndStartServices告诉我“INSTALLFOLDER”不在session.CustomActionData字典中。

<Binary Id="ServiceInstaller" SourceFile="DeploymentItems\ServiceInstaller.CA.dll" />

<CustomAction Id="SetInstallFolderForCA" Property="InstallAndStartServices" Value="INSTALLFOLDER=[INSTALLFOLDER]" Execute="immediate" Return="check" />
<CustomAction Id="InstallAndStartServices" BinaryKey="ServiceInstaller" DllEntry="InstallAndStartServices" Execute="immediate" Return="check" />

<InstallExecuteSequence>
  <Custom Action="SetInstallFolderForCA" After="InstallFiles">NOT Installed</Custom>
  <Custom Action="InstallAndStartServices" After="SetInstallFolderForCA"/>
</InstallExecuteSequence>

MSI(s)(78:DC)[15:31:47:745]:PROPERTY CHANGE:添加InstallAndStartServices属性。它的值是'INSTALLFOLDER = C:\ Program Files \ My Product \'。

MSI(s)(78:DC)[15:31:47:745]:采取行动:InstallAndStartServices

MSI(s)(78:DC)[15:31:47:745]:注意:1:2205 2:3:ActionText

行动开始15:31:47:InstallAndStartServices。

开始安装服务

自定义操作引发的异常: System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---&GT; System.Collections.Generic.KeyNotFoundException:字典中没有给定的键。

at System.Collections.Generic.Dictionary`2.get_Item(TKey key)

at Microsoft.Deployment.WindowsInstaller.CustomActionData.get_Item(String key)

string installFolder = session.CustomActionData["INSTALLFOLDER"];

1 个答案:

答案 0 :(得分:2)

请参阅:

Deployment Tools Foundation (DTF) Managed Custom Actions

  

注意:为了简洁起见,本博文将假设   读者已经对Windows有了深刻的理解   安装程序架构和理念。我不会完全尝试   涵盖MSI的声明和交易设计目标   不同自定义行为的专业人士和骗子的肮脏细节   类型。如果你没有这方面的知识,我强烈建议你   在为Windows Installer编写自定义操作之前获取它   包。

Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer

  

摘要:在InstallShield Professional中创建自定义操作时    - Windows Installer Edition您有几个脚本内执行选项可供选择:

     

•立即执行

     

•延期执行

     

•回滚执行

     

•提交执行

     

•系统

中的延迟执行      

上下文

     

本文解释了这些选项的含义以及它们如何影响   您的自定义操作在安装运行时执行的阶段。   它还可以帮助您将自定义操作插入正确的位置   在用户界面或执行序列中,以避免错误   像“无法写脚本记录。交易未开始。”等消息。