Я хотел бы обновить dll для серверного процесса, не останавливая службу. Как мне это сделать? Немного похоже на то, как asp.net автоматически собирает новые dll, помещенные в папку bin.Обновление dll без остановки службы
ответ
Asp.Net использует технологию, называемую shadow copy
Если скопировать обновленный DLL в подкаталог бен приложение, в, среда ASP.NET признает, есть новый код для выполнения. Поскольку ASP.NET не может заменить dll в существующий AppDomain, он запускает новый AppDomain. Старый домен приложения «сток остановлен», то есть существующие запросы разрешены для завершения выполнения, и как только все они будут завершены, AppDomain может выгрузить. Новый AppDomain начинается с нового кода и начинает принимать все новые запросы.
Обычно, когда DLL загружается в процесс, процесс блокирует DLL, и вы не можете перезаписать файл на диске. Тем не менее, AppDomains имеет функцию, известную как Shadow Copy, которая позволяет сборкам оставаться разблокированными и сменными на диске.
Время выполнения инициализирует ASP.NET с включенным Shadow Copy для каталога bin. AppDomain скопирует любую необходимую DLL из каталога bin во временное место перед блокировкой и загрузкой dll в память. Shadow Copy позволяет перезаписывать любую DLL в каталоге bin во время обновления без отключения веб-приложения.
В дополнении к ответу Gulzar в:
Если ваш сервис только непосредственно ссылки на DLL файлов вам нужно изменить дизайн на службу немного, чтобы использовать AppDomains и возможность ShadowCopy, чтобы воспользоваться этой функцией.
Мы делаем что-то вроде этого, где служба - это всего лишь процесс оболочки/хоста. Вся функциональность загружается в отдельные домены приложений в случае необходимости.
Когда процесс загрузил DLL это не возможно, чтобы изменить его.
IIS не хранит DLL, загруженную в память, когда она не используется (affected by the Cache property), и я предполагаю, что это так же происходит с ASP.NET. Если вы будете следовать той же стратегии, вы также можете обновить свои DLL.
Однако, если ваши DLL-файлы используются, вы должны сообщить, что ваш серверный процесс выгрузит все ваши DLL-файлы.
Для этого серверный процесс должен загружать все DLLS, используя вызовы LoadLibrary, чтобы он мог выгружать их, когда он получает сообщение с просьбой об этом.
Связь с процессом сервера может быть выполнена путем создания глобального доступного именованного события, доступ к которому может быть получена новой программой и используется для оповещения о запущенном процессе обновления. (Вы также можете подумать о других вариантах этого).
- 1. Обновление DLL вакансии Quartz.NET без перезагрузки службы
- 2. Ошибка остановки службы Windows
- 3. Android остановки службы
- 4. Предотвращение остановки службы службы Windows C#
- 5. Как обновить dll сайта ASP.Net без остановки сайта
- 6. Реконструкция проекта без остановки отладки
- 7. Предотвращение службы с принудительной остановки
- 8. Правильный способ остановки службы Ruby
- 9. Как сделать состояние службы nova для тестирования без остановки узла?
- 10. Загрузите файл без остановки внутри службы (Not IntentService)
- 11. Запуск Откройте крышку на службу WCF (без остановки службы)
- 12. Обновление конфигурации mongod без перезапуска службы
- 13. Обновление ui из службы без широковещательного приемника
- 14. Инициирование остановки остановки NSTimer (без потоков)
- 15. Задача докера, начинающаяся с остановки, без остановки
- 16. Функции ожидания без остановки
- 17. GDB backtrace без остановки
- 18. JQuery Slider без остановки
- 19. Обновление службы Windows dll's
- 20. Динамическое обновление загруженной Dll
- 21. Безопасный метод для остановки операции внутри dll
- 22. Обновление службы Windows с помощью Inno Setup
- 23. .NET без использования DLL
- 24. Динамическое обновление DLL на рабочем экземпляре
- 25. Использование одной службы для остановки еще
- 26. Android - Уведомление о ожиданииIntent для остановки службы
- 27. PendingIntent для запуска и остановки службы
- 28. Предотвращение остановки службы Windows во время отладки
- 29. Как избежать остановки службы при изменении конфигурации?
- 30. Обновление службы AWS ECS
Какая среда/язык вы обслуживаете? Существует огромное различие между Win32 и .NET, когда дело доходит до решения этой проблемы ... – mdb 2008-10-22 16:32:53
это приложение .net. – Matt 2008-10-22 16:36:54