Запуск msiexec из службы (учетная запись локальной системы) - PullRequest
14 голосов
/ 09 апреля 2010

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

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

Есть ли какие-то предостережения при запуске msiexec из службы локальной системы?

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

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

Ответы [ 4 ]

5 голосов
/ 09 апреля 2010

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

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

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

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

  4. Перезапустить услугу

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

3 голосов
/ 10 марта 2011

В случае, если кто-то еще столкнется с этим, вот что я нашел.

Я устанавливал программу из службы, работающей как LocalSystem. Установка немедленно вернется с кодом завершения 0. Однако программа, похоже, не установлена. Файлы не были скопированы на место, и ярлыки не были созданы. Поиск в файле журнала был трудным, потому что у него не было простого сообщения об успехе или ошибке. Когда я запускал службу как обычную учетную запись администратора, она работала нормально. Я наконец заметил в файле журнала, что там написано

Определено, что существующий продукт (или этот продукт или продукт обновляется патчем) установлено на машину.

Он не был указан как установленный в Панели управления> Программы, но по какой-то причине Windows подумала, что он уже установлен. К сожалению, запуск msiexec /x для удаления программы также не дал результатов.

Я попытался изменить код продукта и обновить код, и альт, это сработало. В моем случае я контролировал установочный код продукта и коды обновления, чтобы я мог это сделать. Если в чьем-либо случае у вас нет такого доступа, вы можете попробовать установить другое произвольное программное обеспечение (которое будет иметь другой код продукта / обновления) и посмотреть, работает ли оно, и если да, то, по крайней мере, вы знаете это проблема.

1 голос
/ 24 августа 2010

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

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

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

1 голос
/ 25 июня 2010

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

msiexec /i setup.msi ALLUSERS="1"

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

...