MSI Installer запускает авторемонт при запуске сервиса - PullRequest
1 голос
/ 08 апреля 2010

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

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 08 апреля 2010

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

0 голосов
/ 10 июня 2010

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

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

0 голосов
/ 08 апреля 2010

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

...