WiX / SetupBuilder получить значение INSTALLDIR в VBScript - PullRequest
0 голосов
/ 30 апреля 2019

Для создания 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>

Согласно документации WiX для CustomAction Element , комбинация Property и Value должна привести к Custom Action Type 51 , и это довольно много, где я получаю потерял. Слишком много неизвестных, чтобы понять, только для доступа к простому свойству.

Может кто-нибудь, пожалуйста, помогите мне понять; как я могу получить доступ к собственности?

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Вы можете попробовать:

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 голос
/ 30 апреля 2019

На ваш вопрос может быть несколько возможных ответов:

  1. Пакет MSI не содержит свойства INSTALLDIR, поскольку он нестандартный и должен быть явно создан.
  2. Выпытаемся получить доступ к нему с помощью отложенного пользовательского действия.Это не будет работать, потому что в отложенном режиме доступно только ограниченное количество свойств.Чтобы получить доступ к любым другим свойствам, вы должны использовать свойство CustomActionData.Вы можете прочитать больше об этом здесь и здесь .
...