首页 > 解决方案 > WiX/SetupBuilder 在 vbscript 中获取 INSTALLDIR 的值

问题描述

要创建 MSI,我使用 Gradle 插件SetupBuilder

安装后,我需要从安装目录执行一个二进制文件。但我无法访问 INSTALLDIR 属性:

msi {
  postinst = '''
MsgBox ("INSTALLDIR: " & Session.Property("INSTALLDIR"))
'''
}

但:

INSTALLDIR 为空

我发现 SetupBuilder 在 .wxs 文件中创建了以下自定义操作:

    <CustomAction Execute="deferred" Id="Postinst_Script0" Impersonate="no" Script="vbscript">
MsgBox ("INSTALLDIR: " &amp; Session.Property("INSTALLDIR"))
</CustomAction>

<CustomAction Id="SetPropertiesPostinst_Script0" Property="Postinst_Script0" Value="INSTALLDIR='[INSTALLDIR]';ProductCode='[ProductCode]';INSTANCE_ID='[INSTANCE_ID]'"/>

然后他们被这样称呼:

<InstallExecuteSequence>
  <Custom Action="Postinst_Script0" Before="InstallFinalize">NOT Installed OR REINSTALL OR UPGRADINGPRODUCTCODE</Custom>
  <Custom Action="SetPropertiesPostinst_Script0" Before="Postinst_Script0"/>
</InstallExecuteSequence>

根据有关CustomAction ElementProperty的 WiX 文档,和的组合Value应该导致自定义操作类型 51,这几乎是我迷路的地方。太多未知数无法理解,只是为了访问一个简单的属性。

有人可以帮我理解吗?我如何访问该物业?

标签: gradlevbscriptwix

解决方案


您的问题可能有几个可能的答案:

  1. MSI 包不包含INSTALLDIR属性,因为它是非标准的,应显式创建。
  2. 您正在尝试在延迟的自定义操作中访问它。这将不起作用,因为在延迟模式下只有有限数量的属性可用。要访问任何其他属性,您应该使用CustomActionData属性。您可以在此处此处阅读有关它的更多信息。

推荐阅读