Выполнение msiexec от сервиса (Локальная Системная учетная запись)

Мы работаем над системой обновления для нашего программного обеспечения. updater должен работать в фоновом режиме как услуга, и когда обновление доступно, загрузите и установите его. Нам нужен сервис для установки обновления, так как MSI требует, чтобы повышение работало, но некоторые наши клиенты будут ограниченными пользователями.

MSI является WiX MSI и делает значительное обновление, когда выполнено. Проблема, обновление, кажется, не работает, когда выполнено от нашего сервиса. Я вижу msiexec, выполненный, и он возвращается успешно, но это, кажется, не вносит изменений в систему. Та же команда, когда выполнено от моей учетной записи пользователя работает как ожидалось.

Там некоторый протест к выполнению msiexec от Локальной Системной службы?

Мы просто делаем:

string arguments = "/i /quiet /lv*x " + pathToLogFile;   
System.Diagnostics.Process.Start("msiexec.exe", arguments);

14
задан Peter Mortensen 21 June 2013 в 13:30
поделиться

3 ответа

Если ваша служба является службой Windows, выполните следующие действия:

  1. Откройте свойства вашей службы в консоли служб.

  2. Перейдите на вкладку Вход в систему

  3. Установите учетную запись с правами на обновление системы (вашу или специально созданную для этой цели)

  4. Перезапустите службу

В этом случае, служба будет запускаться с соответствующими правами и может выполнять обновления.

5
ответ дан 1 December 2019 в 15:12
поделиться

У меня была такая же задача, описанная выше, и я обнаружил, что если программа установлена для ВСЕХ пользователей, то запуск msiexec будет работать из службы, запущенной под учетной записью SYSTEM. Поэтому, чтобы это сработало, вам придется установить программу для ВСЕХ пользователей. В моем случае при первой установке программы я указал команду msxexec следующим образом.

msiexec /i setup.msi ALLUSERS="1"

Как только это будет сделано, вы сможете просто обновить программу из Service без каких-либо проблем.

1
ответ дан 1 December 2019 в 15:12
поделиться

Возможно, вам потребуется использовать параметр REINSTALLMODE , который позволяет управлять обновлением. Если они не предоставлены, установка может автоматически не обновить ваше приложение (или, по крайней мере, то, что я обнаружил, хотя я все еще не уверен, применяется ли то же поведение к System.Diagnostics.Process.Start):

msiexec.exe /i /quiet yourinstaller.msi REINSTALL=All REINSTALLMODE=vomus

См. здесь для получения дополнительной информации о различных флагах, которые можно передать в msiexec.exe .

1
ответ дан 1 December 2019 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: