2013-03-20 4 views
1

Я делаю службу Windows, которая может быть автоматически обновлена. План состоит в том, чтобы иметь консольное приложение, которое запускается при наличии новой версии предоставляемой услуги. Это приложение будет удалять и повторно устанавливать службу с новой версией, ссылаясь на MSI. Итак, мне нужна копия MSI в папке приложения.Можно ли добавить копию MSI в собственный файл приложения?

Может ли MSI поместить копию себя в папку приложения при установке? Если да, то как?

Заранее благодарен!

+0

Есть, вероятно, лучшие и более ортодоксальные способы, чем тот, который вы предлагаете. См. Http://stackoverflow.com/questions/246886/process-for-updating-a-windows-service-automated-or-is-it-manual, http://stackoverflow.com/questions/106765/i-want -my-c-sharp-windows-service-to-automatic-update-yourself # 106799 и http://stackoverflow.com/questions/691663/auto-update-library-for-net –

+0

@RobertHarvey, у меня есть прочитайте эти сообщения раньше, и они предлагают использовать отдельный процесс для остановки и перезапуска службы. Также они рекомендуют использовать установщик. Вот как я пытаюсь реализовать процедуру обновления. Не могли бы вы дать больше разъяснений относительно того, как мое решение может быть улучшено? Благодарю. – HamChunck

+0

Здесь есть хороший пример: http://stackoverflow.com/a/328211 –

ответ

0

Вместо того, чтобы пытаться скопировать .msi (что требует некоторых реальных хаков, чтобы сделать саморекламу), я бы рекомендовал просто обновить старый .msi файл .msi. Тогда вам просто нужен новый .msi, а старый .msi не нужен.

В качестве альтернативы вы можете поместить вещи в Bundle (с помощью Burn engine из набора инструментов WiX), и у него есть возможность делать автоматические обновления через Bundle.

0

Этот подход изначально ошибочен.

Существует множество возможностей обновить что-либо, если доступна новая версия.

  1. Проверьте их на установке (некоторый инсталлятор имеет Autodownloader функции) - частичное решение, нет возможности автоматического обновления
  2. служба должна открыть для себя новые версии (фоновый поток) - необходимо некоторое развитие [MSI автоматической установки в фоновом режиме ] < - предпочтительнее
  3. Централизованное развертывание - есть решения для централизованной установки, даже MS, IBM и т. Д. Имеет инструменты для этого. Поэтому, если новое решение будет готово, независимо от того, что вы можете развернуть в своем домене. < - не очень экономически выгодно, используется tippicaly крупными компаниями

+1 Также есть некоторые способы, которыми вы можете это сделать, не останавливая обслуживание. В C# вы можете загружать и выгружать версии, собранные в версиях, на лету, но делает жизнь вашего разработчика реальной.

Если вы выбрали вариант 2.nd, вы можете запустить «процесс asyncronly» из кода, чтобы программа установки запускалась с параметрами по умолчанию (поиск без установки), хотя вы можете определить пользовательские настройки «my.msi -s config .файл". Установщик должен быть подготовлен для проверки и остановки самого сервиса, если он уже существует.

Это сложная история, поиск некоторых ключевых слов, о которых я упомянул.

+0

Спасибо за ответ! Второй вариант - это то, на что я смотрю. Я хочу, чтобы мой асинхронный процесс вызывал мой MSI молча. Это я хочу, чтобы моя MSI создала свою копию в папке приложения. Имеет ли это смысл? – HamChunck

+0

Как сказал Роб в превью.ответьте, нет необходимости сохранять, оригинальный установщик ITSELF, если вы не хотите отменить способность. Если вы не будете осторожны, это может привести к бесконечным циклам. Вы должны загрузить его в фоновом режиме, а затем выполнить установку без звука в фоновом режиме. – nBalu