Передайте аргументы командной строки в настраиваемое действие WiX - PullRequest
0 голосов
/ 26 февраля 2019

У нас есть настольное приложение, установленное через установщик Windows (msi), и мы хотим добавить пользовательское действие, которое перезапускает .exe, когда мы передаем LAUNCH_APP=1 в cmd.

.У меня есть сценарий VBS, который запускает файл bat, который запускает установить MSI (серьезное обновление):

сценарий VBS:

Set WshShell = CreateObject("WScript.Shell")
Const TemporaryFolder = 2
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim tempFolder: tempFolder = fso.GetSpecialFolder(TemporaryFolder)
WshShell.Run chr(34) & WScript.Arguments(0) & chr(34) & chr(32) & chr(34) & tempFolder & "\Lifen\update\LifenInstaller.msi" & chr(34) & chr(32) & chr(34) & WScript.Arguments(1) & chr(34), 0, True
Set WshShell = Nothing

сценарий Bat:

@echo off 

call :start >%APPDATA%\Lifen\batMsiLog.log

:start
wmic process where "name='Lifen.exe'" delete
start /wait msiexec /i %1 /qn /norestart /log %APPDATA%\Lifen\msilog.log LAUNCH_APP=1

И в моем установщике wix (wix версии 3.1.0) есть это настраиваемое действие:

<Property Id="WixQuietExecCmdLine" Value='"[INSTALLFOLDER]\Lifen.exe"'/>
<CustomAction Id="QtExecRestartApp" BinaryKey="WixCA" DllEntry="WixQuietExec" Execute="immediate" Return="check"/>
<InstallExecuteSequence>
  <Custom Action="QtExecRestartApp" After="InstallFinalize">LAUNCHAPP = 1</Custom>
</InstallExecuteSequence>

Я не знаю, как добавить аргумент (например, —new-version) в мое настраиваемое действие, чтобы перезапустить мой exe.

В конце я хотел бы запустить команду:

Lifen.exe —new-version

Я пытался написать ее различными способами:

  • '"[INSTALLFOLDER]\Lifen.exe --new-version=x.x.x"'
  • '"[INSTALLFOLDER]\Lifen.exe" "--new-version=x.x.x"'

или также после прочтения этого стекового потока: Как добавить аргументы в exe пользовательского действия в Wix?

  • '"&quot;[#"[INSTALLFOLDER]\Lifen.exe"]"&quot; "--new-version"'
  • '"&quot;[#"[INSTALLFOLDER]\Lifen.exe"]"&quot; "--new-version"'

У кого-нибудь есть идея?

Заранее спасибо

1 Ответ

0 голосов
/ 27 февраля 2019

Основной синтаксис

<Property Id="WixQuietExecCmdLine" Value='"[INSTALLFOLDER]Lifen.exe" --new-version'/> 
  • Вам всегда нужно указывать пути , потому что они могут содержать пробелы.
  • Вам не нужна обратная косая черта после свойств папки , как [INSTALLFOLDER], поскольку среда выполнения MSI гарантирует, что значения всех свойств папки установки заканчиваются обратной косой чертой.
  • То же самое для аргументов, вам нужно процитировать, если они могут содержать пробелы .Если у вас есть постоянный аргумент, такой как --new-version, где вы точно знаете, что пробелов нет, вам не нужно заключать в кавычки.Для аргументов, которые содержат ссылки на свойства, безопаснее всегда заключать в кавычки.E. g.:

    <Property Id="WixQuietExecCmdLine" Value='"[INSTALLFOLDER]Lifen.exe" "--new-version=[NEWVERSION]"'/> 
    

Если вы сомневаетесь, загляните в подробный журнал , чтобы увидеть, является ли фактическое значение WixQuietExecCmdLineчто вы ожидаетеАктивируйте подробное ведение журнала, вызвав msiexec -l*v logfile.txt <OtherParameters>.

64-битные исполняемые файлы

Чтобы запустить 64-битные исполняемые файлы, используйте вместо этого пользовательское действие WixQuietExec64 и свойство WixQuietExec64CmdLine.

...