Я создал службу Windows, теперь я хочу, чтобы она автоматически обновлялась. Я прочитал о создании второй службы, чтобы сделать это или другую программу, не используйте клик один, а как насчет myBuild? Кто-нибудь знает это? Каков наилучший способ? Могу ли я просто сменить сборки?Молчаливое обновление службы Windows
5
A
ответ
5
Если вы хотите, чтобы ваш сервис для запуска во время выполнения обновления, вот что я делал раньше, чтобы достичь этого:
- Положите вашу updateble логики в отдельный DLL.
- Создание AppDomain в рамках вашего сервиса.
- Создать монитор файла, что пожары событие всякий раз, когда вы копируете этот файл (вы можете использовать MSFT Ent Lib Updates)
- Выгрузка старую DLL во время блокировки (очереди) нити, которые выполняют вещи из этой библиотеки
- нагрузки в новый файл dll в домене приложения.
- Сообщите своим темам, чтобы продолжить обработку.
3
- Загрузить новый exe и любую дополнительную сборку.
- Переименуйте существующую сборку.
- Скопировать в вашу новую сборку.
- Restart Service. Вы можете создать функцию перезапуска службы в своем основном сервисе exe.
- Когда служба запускает проверку переименованных файлов с шага 2 и удаляет их для очистки.
Чтобы перезапустить службу сделать
System.Diagnostics.Process.Start
(System.Reflection.Assembly.GetEntryAssembly().Location)
Тогда в службе сделать
private const string _mutexId = "MyUniqueId";
private static Mutex _mutex;
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
try
{
bool alreadyRunning = false;
try
{
Mutex.OpenExisting(_mutexId);
alreadyRunning = true;
}
catch (WaitHandleCannotBeOpenedException)
{
alreadyRunning = false;
}
catch
{
alreadyRunning = true;
}
if (alreadyRunning)
{
using (ServiceController sc = new ServiceController("MyServiceName"))
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 120));
sc.Start();
}
return;
}
}
catch
{
}
_mutex = new Mutex(true, _mutexId);
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
// Load the service into memory.
ServiceBase.Run(ServicesToRun);
_mutex.Close();
}
1
Вы можете изменить вашу службу Windows, так что это просто бегуны для вашего основного приложения, и имеет функциональность для обновления вашего основного приложения.
Таким образом, вы бы:
Service.exe: Запускает application.exe, отслеживает удаленное местоположение для обновления до application.exe. Отправляет события запуска/остановки в Application.exe
Application.exe: Каким бы ни был ваш Service.exe. Получает события запуска/остановки.
Смежные вопросы
- 1. Обновление службы Windows dll's
- 2. Автоматическое обновление службы Windows
- 3. Обновление .Net службы Windows
- 4. Молчаливое обновление Firefox с помощью командной строки
- 5. Обновление службы Windows на фоне
- 6. Молчаливое уведомление
- 7. Обновление службы Windows с помощью Inno Setup
- 8. Обновление службы Windows с помощью установщика MSI
- 9. Обновление членства ASP.Net от службы Windows
- 10. Молчаливое обновление программного обеспечения без контроля доступа пользователей
- 11. Молчаливое автоматическое обновление с использованием Cocoa для Mac
- 12. Молчаливое обновление приложений для iOS в одном приложении
- 13. Apache2 VirtualHost - правильное молчаливое перенаправление?
- 14. Запуск и остановка службы Windows с другой службы Windows
- 15. Службы Windows Phone app
- 16. службы windows
- 17. службы windows
- 18. службы windows
- 19. службы Windows
- 20. службы windows
- 21. Службы Windows
- 22. Развертывание службы Windows
- 23. Обновление/обновление Windows Phone
- 24. Службы отслежывания отследов службы Windows
- 25. Службы Windows в Win7?
- 26. Обновление андроида от службы
- 27. Liferay обновление службы
- 28. Обновление веб-службы asp.net
- 29. Обновление переменной внутри службы
- 30. Требуется обновление версии службы?
... извините, вероятно, не объяснено ужасно хорошо. Написание ответов SO в 3 часа ночи, вероятно, не самая лучшая идея;) –