C# в Windows, обновляющий программу, пока она еще работает

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

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


person probably at the beach    schedule 24.01.2012    source источник
comment
Является ли поддержка менеджера перезагрузки недостаточной (требуется Windows Vista или более поздняя версия) или этот киоск работает, скажем, на Windows XP? Самообновления... привередливы.   -  person Michael Urman    schedule 24.01.2012
comment
Привет Майкл - да, это работает на XP   -  person probably at the beach    schedule 24.01.2012
comment
Привет, Ричард, прямо сейчас я сталкиваюсь с теми же проблемами в своем киоске на основе WPF. Что ты в итоге сделал?   -  person Uri Abramson    schedule 30.06.2013
comment
Решение @UriAbramson Cristophers — хороший способ реализовать этот шаблон.   -  person probably at the beach    schedule 01.07.2013


Ответы (2)


Я уже делал эту историю. Это работает следующим образом:

Пользовательский интерфейс работает как пользователь, вошедший в систему.

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

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

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

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

person Christopher Painter    schedule 24.01.2012

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

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

person Mesh    schedule 24.01.2012
comment
Сначала я попробовал oneclick, но у меня были проблемы с разрешениями, службе также необходимо настроить параметры принтера, а блокировка безопасности одним щелчком усложняла эту задачу. - person probably at the beach; 24.01.2012
comment
Конфигурация киоска и принтера звучит как отдельная проблема... как часто вам действительно нужно менять конфигурацию печати? - person Mesh; 24.01.2012
comment
Около 5 раз в час - это особый случай. - person probably at the beach; 24.01.2012
comment
Я считаю ClickOnce очень ограниченным вариантом. Вы должны оставаться внутри песочницы, чтобы она работала, и если у вас есть что-то за ее пределами, вас обливают шлангом. MSI — это универсальное решение, для которого требуется лишь немного дизайнерской работы, кодирования и тестирования. - person Christopher Painter; 25.01.2012