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

Session 是否有其他方法可以访问延迟自定义操作中的会话详细信息?,session,wix,windows-installer,custom-action,Session,Wix,Windows Installer,Custom Action,我有一个自定义操作,需要获取以下值,以便将某些部件从安装文件夹复制到VS2010文件夹 VS2010目录路径(VS2010DEVENVproperty) 安装路径(INSTALLLOCATIONproperty) 为了赋予足够的权限,我将自定义操作设置为Execute='deferred'Impersonate='no'。但在运行安装程序时,它记录了以下消息: 无法从非即时自定义操作访问会话详细信息 似乎我们无法访问“延迟”自定义操作中的属性(即会话[“VS2010DEVENV”]) 是否有其他

我有一个自定义操作,需要获取以下值,以便将某些部件从安装文件夹复制到VS2010文件夹

  • VS2010目录路径(
    VS2010DEVENV
    property)
  • 安装路径(
    INSTALLLOCATION
    property)
  • 为了赋予足够的权限,我将自定义操作设置为
    Execute='deferred'Impersonate='no'
    。但在运行安装程序时,它记录了以下消息:

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

    似乎我们无法访问“延迟”自定义操作中的属性(即
    会话[“VS2010DEVENV”]

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

    肯定会有帮助。请特别注意页面底部,这是关于如何通过传递值的两个步骤的指南

    以下是摘录:

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

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

  • 其他详细信息:在“自定义操作类型51”(基本上只是设置属性值的自定义操作)中使用以下语法可以传递多个属性值:

    可以从自定义操作中检索值,如下所示:

    string prop1 = session.CustomActionData["PROPERTY1"];
    string prop2 = session.CustomActionData["PROPERTY2"];
    
    下面是一个为ID为“MyCustomAction”的自定义操作设置属性值的示例:

    
    

    (阅读此示例中用于检索ID为“MyExecutableFile”的文件的安装位置的格式化语法的更多详细信息。)

    感谢您的帮助。CustomActionData属性运行良好。但我想知道如何传递多个值。在我的例子中,我需要VS2010和安装文件夹的值。如果可能的话,您能给出一些提示吗?您必须解析在延迟自定义操作中传递的字符串。例如,您可以传递
    [VS2010DEVENV]|[INSTALLLOCATION]
    ,并在延迟CA中按
    |
    拆分CustomActionData。如果您对CA使用DTF,它具有类似字典的CustomActionData属性,您可以像
    vs2010=[VS2010DEVENV]那样传递它;location=[INSTALLLOCATION]
    ,像
    session.CustomActionData[“vs2010”]
    session.CustomActionData[“location”]
    一样获取它!这完全解决了我的问题。非常感谢您的建议。CustomActionData链接已断开(页面上显示“此主题不再可用”)。但这是指在正确的方向,谢谢我!有没有办法将安装脚本中的所有属性发送到自定义操作?我已经使用了这个方法,但是我无法获得INSTALLLOCATION或INSTALLDIR属性,尽管我收到了TARGETDIR属性。非常感谢这个具体的例子。正是我需要的。未来的访问者还应查看更多详细信息和示例。
    string prop1 = session.CustomActionData["PROPERTY1"];
    string prop2 = session.CustomActionData["PROPERTY2"];
    
    <CustomAction
      Id="SetCustomActionPropertyValues"
      Property="MyCustomAction"
      Value="INSTALLDIR=[INSTALLDIR];EXECUTABLE=[#MyExecutableFile]" />