Установщик MSI запускает автоматическое восстановление при запуске службы

У меня есть MSI на основе WiX, который устанавливает службу и некоторые ярлыки (и множество других файлов, которые этого не делают).

Ярлык создается, как описано в документах WiX, с ключом реестра в HKCU. как ключевой файл. Это установка для всех пользователей, но для того, чтобы обойти ICE38, этот раздел реестра должен принадлежать текущему пользователю.

Когда служба запускается (она работает под учетной записью SYSTEM), она замечает, что этот раздел реестра недействителен (по крайней мере, для этого пользователя), и снова запускает установку для «восстановления».

В журнале событий я получаю события MsiInstaller 1001 и 1004, показывающие, что «Ресурс 'HKEY_CURRENT_USER \ SOFTWARE \ MyInstaller \ Foo' не существует». Это неудивительно, поскольку у пользователя SYSTEM не было бы этого ключа.

Я включил общесистемное ведение журнала MSI, и автоматическое восстановление создало свой файл журнала в папке C: \ Windows \ Temp, а не в папке TEMP конкретного пользователя, что, похоже, подразумевает, что текущий пользователь был SYSTEM (плюс файл журнала показывает "Calling процесс "быть мне на службе").

Могу ли я что-нибудь сделать, чтобы отключить функцию автоматического восстановления? Я что-то делаю не так или нарушаю какое-то правило MSI? Есть подсказки, где искать дальше?


person Josh Clark    schedule 07.04.2010    source источник
comment
Разве вы не можете вместо этого добавить ярлык в меню запуска alluser в файловой системе?   -  person Dirk Vollmar    schedule 08.04.2010


Ответы (3)


Разделите компоненты на отдельные функции. Помещая службу в отдельную функцию, она не будет сканировать другие компоненты.

person Christopher Painter    schedule 08.04.2010

Если вы используете рекламируемый ярлык, вам не нужна запись реестра HKCU.

person saschabeaumont    schedule 08.04.2010
comment
Это может показаться странным, но там, где я работаю, мы не любим рекламу / ремонт. Наше программное обеспечение развертывается в средах, где, хотя мы кэшируем программное обеспечение, заказчик не хочет видеть ремонт, точка. - person Christopher Painter; 08.04.2010

Чтобы избежать автоматического восстановления, которое вы видите, но при этом сохраняете тот же эффект, вы можете использовать ActiveSetup, который представляет собой простую систему, которая гарантирует, что каждый У пользователя есть программа - обычно программа конфигурации или сценарий, который настраивает параметры реестра HKCU - запускается ровно один раз.

(первая статья, ссылка на которую приведена выше, то, что я писал несколько лет назад сравнивает различные методы и, если вы еще не догадались, отдает предпочтение ActiveSetup ...)

person ewall    schedule 10.06.2010