是否有其他方法可以在延迟自定义操作中访问会话详细信息?

时间:2011-09-05 09:49:43

标签: session wix windows-installer custom-action

我有一个自定义操作,需要低于将某些部件从安装文件夹复制到VS2010文件夹的值

  1. VS2010目录路径(VS2010DEVENV属性)
  2. 安装路径(INSTALLLOCATION属性)
  3. 为了提供足够的权限,我将自定义操作设置为Execute='deferred' Impersonate='no'。但是在运行安装程序时,它会记录消息:

      

    无法从非立即自定义操作中访问会话详细信息

    似乎我们无法通过“延期”自定义操作访问属性(即session["VS2010DEVENV"]

    还有其他方法可以根据需要检索这些值吗?

2 个答案:

答案 0 :(得分:31)

This必须有所帮助。请特别注意页面底部,指导如何通过CustomActionData传递值的两个步骤。

以下是摘录:

  

将属性的值写入安装脚本以供使用   在延迟执行自定义操作期间:

     
      
  1. 将一个小的自定义操作插入到安装序列中,该序列将感兴趣的属性设置为与其具有相同名称的属性   延迟执行自定义操作。例如,如果是主键   对于延迟执行自定义操作是“MyAction”设置属性   将“MyAction”命名为您需要检索的属性X.您   必须在之前的安装顺序中设置“MyAction”属性   “MyAction”自定义动作。虽然任何类型的自定义操作都可以   设置上下文数据,最简单的方法是使用属性   赋值自定义操作(例如,自定义操作类型51)。
  2.   
  3. 在处理安装顺序时,安装程​​序会将属性X的值写入执行脚本   作为属性CustomActionData的值。
  4.   

答案 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>