Помощь с гарантией использования загрузчика, но с работой обновлений - PullRequest
0 голосов
/ 24 сентября 2010

У нас есть 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. Тогда я не знаю, почему вложенное свойство не установлено правильно, когда значения клиента и сервера верны. Как мне решить эту проблему?

1 Ответ

0 голосов
/ 24 сентября 2010

Я бы посоветовал изменить это условие на (или подобное в зависимости от вашего варианта использования)

<Condition Message="Blah blah blah">SETUPEXE or Installed</Condition> 

Я делаю подобное (InstallShield setup.exe по умолчанию передает свойство SETUPEXEDIR), и это неужасная вещь, которую нужно сделать, если вы хотите убедиться, что ваш установщик был запущен через загрузчик, чтобы обеспечить возможность установки prereqs.Но для сценариев обслуживания / ремонта / удаления вам, вероятно, не требуется запускать файл setup.exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...