Подстановка значения свойства WIX и CAQuietExec - PullRequest
3 голосов
/ 14 января 2010

Пока я не нахожу WIX моим любимым, наиболее интуитивно понятным, простым в использовании языком / системой.

Я создал собственный диалог, ввел данные и вижу значения в журнале установки.

MSI (c) (C8:A4) [14:42:37:137]: PROPERTY CHANGE: Modifying VARRADIOBUTTONENVIRONMENT property. Its current value is 'Dev'. Its new value: 'QA'.
MSI (c) (C8:A4) [14:42:41:448]: PROPERTY CHANGE: Modifying VARTEXTSETTINGSFILENAME property. Its current value is 'C:\Path\SettingsFileGenerator.xml'. Its new value: 'Test1234.txt'.

Позже, когда придет время использовать значение, я вижу это:

Action ended 14:42:43: InstallFinalize. Return value 1.
MSI (s) (BC:F8) [14:42:43:676]: Doing action: QtExec1
Action 14:42:43: QtExec1. 
Action start 14:42:43: QtExec1.
MSI (s) (BC:F4) [14:42:43:682]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIC4A7.tmp, Entrypoint: CAQuietExec
MSI (s) (BC!BC) [14:42:43:690]: PROPERTY CHANGE: Deleting QtExecCmdLine property. Its current value is '"[INSTALLLOCATION]XmlPreprocess.exe /i:web.config /e:[VARRADIOBUTTONENVIRONMENT] "'.
CAQuietExec:  Error 0x8007007b: Command failed to execute.
CAQuietExec:  Error 0x8007007b: CAQuietExec Failed
Action ended 14:42:43: QtExec1. Return value 3.
Action ended 14:42:43: INSTALL. Return value 3.
Property(S): StartIIS7ConfigTransaction = ScaConfigureIIs

И в конце, когда он сбрасывает все свойства, он показывает это:

Свойство (я): VARRADIOBUTTONENVIRONMENT = QA Свойство (я): VARTEXTSETTINGSFILENAME = Test1234.txt Свойство (я): VerifyCurrentPropValueOfEnv = [VARRADIOBUTTONENVIRONMENT]

Вот фрагменты моего кода. Я просто изменил идентификаторы свойств на all-caps и добавил secure = "yes", основываясь на другом посте, который видел. Я пробовал с и без Secure = "да".

        <Property Id="VARRADIOBUTTONENVIRONMENT" Secure="yes">Dev</Property>
        <Property Id="VARTEXTSETTINGSFILENAME" Secure="yes">C:\Path\SettingsFileGenerator.xml</Property>

        ...then later... 

                <Property Id="VerifyCurrentPropValueOfEnv" Value="[VARRADIOBUTTONENVIRONMENT]"/>
        <Property Id="QtExecCmdLine" Value="&quot;[INSTALLLOCATION]XmlPreprocess.exe /i:web.config /e:[VARRADIOBUTTONENVIRONMENT] &quot;"/>
        <CustomAction Id="QtExec1" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="check"/>


<InstallExecuteSequence>
<Custom Action="QtExec1" After="InstallFinalize"><![CDATA[NOT(Installed)]]></Custom>
</InstallExecuteSequence>

В конце установки я вижу, что XmlPreProcess.exe установлен в установочном каталоге.

Вопросы:

  1. Есть ли что-то, что я делаю неправильно, чтобы заменить значения?

  2. Я использую CAQuietExec, потому что мне сказали, что он будет регистрировать лучшие ошибки и отображать вывод командного окна в журнал установки. Я действительно не забочусь о том, чтобы не видеть командное окно. Я не уверен, как узнать, что это значит: Msgstr "CAQuietExec: Ошибка 0x8007007b: Не удалось выполнить команду." Я не могу сказать, является ли это ошибкой WIX при попытке вызвать XmlPreprocess.exe или он попал в XmlPreprocess, а затем выдал ошибку.

Спасибо

Нил Уолтерс

1 Ответ

8 голосов
/ 15 января 2010

Глядя на извлечение журнала, я думаю, что вижу проблему, вы процитировали всю командную строку, попробуйте вместо этого:

<Property Id="QtExecCmdLine" Value="&quot;[INSTALLLOCATION]XmlPreprocess.exe&quot; /i:&quot;[INSTALLLOCATION]web.config&quot; /e:[VARRADIOBUTTONENVIRONMENT]"/>
...