C # на окнах обновления программы, пока она еще работает - PullRequest
1 голос
/ 24 января 2012

У меня есть программа в киоске со связанной службой, которая обновляет программу, периодически проверяя в Интернете более новую версию MSI.Если он найдет его, он установит его, возможно, программа все еще работает.

Чтобы обойти конфликты DLL в приведенном выше решении, я переименовываю сборки в MSI в соответствии с версией, чтобы новая версия могла быть установлена ​​во время работы старой.Приложение будет опрашивать каталог установки для сборок более новой версии и, если оно найдет один перезапуск, как только оно не будет использоваться.Есть ли лучшие способы сделать это?

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Я делал эту историю раньше. Это работает так:

Пользовательский интерфейс работает как зарегистрированный пользователь.

Служба работает как Система. Сервис проверяет контент и загружает его во временный каталог. Затем он объявляет MSI с помощью команды / JM. Теперь установщик может быть установлен непривилегированным пользователем.

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

В конце установщика флаг заставляет установщик перезапустить приложение.

Также взгляните на библиотеку wuw4 . Это помогает в создании многих из этого решения.

2 голосов
/ 24 января 2012

Разве ClickOnce не будет лучшим вариантом здесь?

http://msdn.microsoft.com/en-us/library/t71a733d.aspx

...