我有一个自定义操作,需要低于将某些部件从安装文件夹复制到VS2010文件夹的值
VS2010DEVENV
属性)INSTALLLOCATION
属性)为了提供足够的权限,我将自定义操作设置为Execute='deferred' Impersonate='no'
。但是在运行安装程序时,它会记录消息:
无法从非立即自定义操作中访问会话详细信息
似乎我们无法通过“延期”自定义操作访问属性(即session["VS2010DEVENV"]
)
还有其他方法可以根据需要检索这些值吗?
答案 0 :(得分:31)
This必须有所帮助。请特别注意页面底部,指导如何通过CustomActionData传递值的两个步骤。
以下是摘录:
将属性的值写入安装脚本以供使用 在延迟执行自定义操作期间:
- 将一个小的自定义操作插入到安装序列中,该序列将感兴趣的属性设置为与其具有相同名称的属性 延迟执行自定义操作。例如,如果是主键 对于延迟执行自定义操作是“MyAction”设置属性 将“MyAction”命名为您需要检索的属性X.您 必须在之前的安装顺序中设置“MyAction”属性 “MyAction”自定义动作。虽然任何类型的自定义操作都可以 设置上下文数据,最简单的方法是使用属性 赋值自定义操作(例如,自定义操作类型51)。
- 在处理安装顺序时,安装程序会将属性X的值写入执行脚本 作为属性CustomActionData的值。
醇>
答案 1 :(得分:13)
其他详细信息:可以使用以下语法在"自定义操作类型51"中传递多个属性值。 (这基本上只是一个设置属性值的自定义操作):
PROPERTY1=Value1;PROPERTY2=Value2;PROPERTY3=...
可以在自定义操作中检索值,如下所示:
string prop1 = session.CustomActionData["PROPERTY1"];
string prop2 = session.CustomActionData["PROPERTY2"];
这是一个使用ID" MyCustomAction"设置自定义操作的属性值的示例:
<CustomAction
Id="SetCustomActionPropertyValues"
Property="MyCustomAction"
Value="INSTALLDIR=[INSTALLDIR];EXECUTABLE=[#MyExecutableFile]" />
(有关格式化语法的详细信息,请阅读this MSDN article,在此示例中,该语法用于检索ID为#34; MyExecutableFile&#34;) <的文件的安装位置/ p>