У нас есть MSI, созданный нами в WiX 3.5.2030.0 и предназначенный для установщика Windows 4.0 (для поддержки MSIUSEREALADMINDETECTION
). У нас есть свойство, которое мы определили в MSI для принудительного использования загрузчика (я говорю «принудительно», но это, конечно, «очень сильно поощряет»):
<Property Id="SETUPEXE"
Secure="yes" />
<Condition Message="You must run the MSI through the setup program; you cannot run it directly.">
SETUPEXE = 1
</Condition>
Когда мы запускаем созданный MSI как новую установку, все работает. Однако когда мы запускаем его как обновление, свойство, переданное установщику, в какой-то момент кажется «потерянным». Журнал показывает следующие соответствующие записи:
MSI (s) (2C:8C) [11:27:41:648]: Command Line: SETUPEXE=1 <other properties>
MSI (s) (2C:8C) [11:27:43:055]: PROPERTY CHANGE: Adding SETUPEXE property. Its value is '1'.
MSI (s) (2C:CC) [11:28:11:038]: PROPERTY CHANGE: Adding NETFRAMEWORK20INSTALLROOTDIR property. Its value is 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\'.
Action ended 11:28:11: AppSearch. Return value 1.
MSI (s) (2C:CC) [11:28:11:147]: Doing action: LaunchConditions
Action start 11:28:11: LaunchConditions.
MSI (s) (2C:CC) [11:28:33:662]: Product: <product> -- You must run the MSI through the setup program; you cannot run it directly.
Action ended 11:28:33: LaunchConditions. Return value 3.
Action ended 11:28:33: INSTALL. Return value 3.
Property(N): SETUPEXE = 0
Property(N): SecureCustomProperties = NETFRAMEWORK20INSTALLROOTDIR;NETFRAMEWORK35;NETFRAMEWORK35_SP_LEVEL;NEWERVERSIONDETECTED;OLDERVERSIONBEINGUPGRADED;SETUPEXE
Property(S): SecureCustomProperties = NETFRAMEWORK20INSTALLROOTDIR;NETFRAMEWORK35;NETFRAMEWORK35_SP_LEVEL;NEWERVERSIONDETECTED;OLDERVERSIONBEINGUPGRADED;SETUPEXE
Property(S): SETUPEXE = 1
Я провел поиск по этому вопросу, посмотрел журнал WiLogUtl
и, по крайней мере, выяснил, что Property(N)
указывает на «вложенное» свойство, но я не знаю, что такое вложенность, когда запуск MSI напрямую через msiexec
. Тогда я не знаю, почему вложенное свойство не установлено правильно, когда значения клиента и сервера верны. Как мне решить эту проблему?