Мне никогда не было полностью комфортно с этим решением из-за сложности, а также из-за того, что требования безопасности неясны (и если для этого вам нужно предоставить права пользователю приложения, это не только еще один шаг настройки, но также представляет угрозу для безопасности, и похоже, что предоставление пользователю приложения прав без разбора утилизации пула приложений, особенно по сети, может быть использовано при атаке DOS).
В моей ограниченной ситуации, когда я обнаружил критические условия, которые я смог разрешить с помощью перезапуска и обнаружить во время выполнения, но еще не смог предотвратить более приемлемые изменения кода, и после долгих исследований я прошел через несколько других решения (ОК - хаки ), чтобы сделать это. 1. Сгенерируйте необработанное исключение для вновь порожденной нити, 2. Environment.Exit()
и 3. System.Web.HttpRuntime.UnloadAppDomain()
. У них довольно неприятный побочный эффект - завершение всех выполняющихся запросов, что, по общему признанию, является ужасным взломом, но в некоторых случаях допустимо (например, когда обнаруженное условие препятствует правильной обработке подавляющего большинства запросов в любом случае).
Отвращение к этому хаку оставалось со мной долгие годы, пока я недавно не наткнулся на этот маленький драгоценный камень, который намного проще и полностью избегает WMI
:
System.Web.Hosting.HostingEnvironment.InitiateShutdown();
Мое тестирование показало, что оно делает точно , что мне было нужно, и я верю, что это то, что вы хотели. Согласно документации, он существует с .NET 2.0
, но я никогда не сталкивался с этим в своих исследованиях, пока пару дней назад.