WiX / SetupBuilder在vbscript中获取INSTALLDIR的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WiX / SetupBuilder在vbscript中获取INSTALLDIR的值相关的知识,希望对你有一定的参考价值。

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

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

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

但:

INSTALLDIR is empty

我发现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 Element的WiX文档,PropertyValue的组合应该导致Custom Action Type 51,这几乎是我迷路的地方。要理解太多未知因素,只是为了访问一个简单的属性。

有人可以帮我理解;我该如何进入该物业?

答案

你可以试试:

MsgBox ("CustomActionData: " & Session.Property("CustomActionData"))

如果这项工作你可以尝试:

Dim properties
loadCustomActionData properties
MsgBox ("INSTALLDIR: " & properties("INSTALLDIR"))

' =====================
' Decode the CustomActionData
' =====================
Sub loadCustomActionData( ByRef properties )
    Dim data, regexp, matches, token
    data = Session.Property("CustomActionData")

    Set regexp = new RegExp
    regexp.Global = true
    regexp.Pattern = "((.*?)='(.*?)'(;|$))"

    Set properties = CreateObject( "Scripting.Dictionary" )
    Set matches = regexp.Execute( data )
    For Each token In matches
        properties.Add token.Submatches(1), token.Submatches(2)
    Next
End Sub
另一答案

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

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

以上是关于WiX / SetupBuilder在vbscript中获取INSTALLDIR的值的主要内容,如果未能解决你的问题,请参考以下文章

Wix:在 Wix 之外运行命令时,运行外部 InstallShield 安装程序失败,退出代码为 -3

wix上可以修改别人的网站吗

wix的WIX简介

如何实现 WiX 安装程序升级?

Wix - 如何创建一个临时文件以在安装期间使用

WiX:我在哪里可以下载引导程序?