0

我究竟做错了什么??

请,如果您的回答是我应该使用内置服务在 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]:属性更改:添加 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:调用目标已引发异常。---> System.Collections.Generic.KeyNotFoundException:给定的键不在字典中。

在 System.Collections.Generic.Dictionary`2.get_Item(TKey 键)

在 Microsoft.Deployment.WindowsInstaller.CustomActionData.get_Item(字符串键)

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

1 回答 1

3

看:

部署工具基础 (DTF) 托管的自定义操作

注意:为简洁起见,这篇博文将假设读者已经对 Windows Installer 体系结构和理念有深入的了解。我不会尝试完全涵盖 MSI 的声明性和事务性设计目标或不同自定义操作类型的优缺点的肮脏细节。如果您没有这方面的知识,我强烈建议您在为 Windows 安装程序包编写自定义操作之前获得它。

Windows Installer 中自定义操作的安装阶段和脚本内执行选项

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

•立即执行

•延期执行

•回滚执行

•提交执行

•系统中的延迟执行

语境

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

于 2013-02-13T16:44:18.550 回答