我做错了什么?
请问,如果您的回答是我应该使用内置服务在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"];
答案 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您有几个脚本内执行选项可供选择:
•立即执行
•延期执行
•回滚执行
•提交执行
•系统
中的延迟执行上下文
本文解释了这些选项的含义以及它们如何影响 您的自定义操作在安装运行时执行的阶段。 它还可以帮助您将自定义操作插入正确的位置 在用户界面或执行序列中,以避免错误 像“无法写脚本记录。交易未开始。”等消息。