Выполнение CustomAction в Wix с «если существует» - PullRequest
0 голосов
/ 11 марта 2020

Привет Я хотел бы выполнить следующее CustomAction при установке моей программы:

<!--Include the custom action for overwrite Client.config-->
    <CustomAction Id="SetCmdLineParams" Property="QtExecCA" Value='if exist &quot;[CURRENTDIRECTORY]\Client.config&quot; ("xcopy" /Y &quot;[CURRENTDIRECTORY]\Client.config&quot; &quot;[INSTALLFOLDER]&quot;)' Execute="immediate" />
    <CustomAction Id="QtExecCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>

    <!--Include the InstallExecuteSequence for overwrite Client.config-->
    <InstallExecuteSequence>
      <Custom Action="SetCmdLineParams" After="CostFinalize"/>
      <Custom Action="QtExecCA" Before="InstallFinalize" />
    </InstallExecuteSequence>

К сожалению, это не работает, потому что: CAQuietExe c: Командная строка должна начинаться с цитируемого имени приложения.

Но если я цитирую «если существует», то команда не работает. Что я могу сделать сейчас?

1 Ответ

1 голос
/ 11 марта 2020

, если существует, является функцией cmd.exe. Сначала вам нужно будет сказать cmd / c или создать файл .bat и назвать его.

Честно говоря, это действительно код agile. Для одного CURRENTDIR не всегда будет то, что вы думаете. Вы должны написать пользовательское действие C ++ или C#, которое использует свойство OriginalDatabase, чтобы узнать, откуда запускается MSI, и скопировать оттуда файл конфигурации.

Еще один подход, который я очень успешно использовал в прошлом, это написать утилиту, которая может преобразовать начальный MSI путем встраивания в него предоставленного пользователем файла конфигурации. Теперь история развертывания упрощена.

...