Получение ASP.NET для просмотра изменений в PATH
Я изменил окружающую среду PATH
на моем сервере и мне нужен IIS / W3WP (то есть мое приложение ASP.NET), чтобы увидеть это изменение. Я понимаю из ответ на этот другой вопрос это (выделено мной):
Вы должны будете переработать процесс IIS чтобы обновить
Мой вопрос: как «переработать» процесс IIS?
Вот что я пытался решить эту проблему:
Использовать iisreset
Я пробовал несколько вещей. Первое, что я попробовал, было iisreset
, но мое приложение asp.net сделало не подобрать путь изменения. Чтобы убедиться, что я не сумасшедший, я попытался перезагрузить сервер, который сделал работа: теперь приложение подбирает новые PATH
.
Я хотел бы знать, есть ли способ предотвратить необходимость перезагрузки всей машины только потому, что я хочу PATH
изменилось в моем приложении ASP.NET ...
Еще одна вещь, которая может иметь место, заключается в том, что я неправильно понял другой вопрос (что ответчик имел в виду iisreset
когда говорят "переработать iis")? Это не объясняет почему iisreset
не сработало для моей ситуации, и перезагрузка сервера сделала. Есть варианты для iisreset
что мне не хватает?
Поиск в сети
Я также пробовал искать решения. От моего первые поиски о моем PATH
проблемы не привели к реальной информации (за исключением вышеупомянутого вопроса). Мой вторая серия поисков об утилизации процесса IIS не очень хорошо: я получаю информацию о iisreset
и как это можно перерабатывать рабочие процессы.
Перезапуск W3SVC
An ответчик предложил перезапустить W3SVC («Служба публикации в Интернете»), которая казалась многообещающей, но она также не сработала для меня (хотя она может сработать для вас!). Я попробовал это предложение, изменив путь, используя свежий командная строка для проверки внесения изменений и перезапуск W3SVC: нет кубиков для моего приложения ASP.NET. После перезагрузки новая командная строка по-прежнему будет показывать измененный путь, и мое приложение также увидит это изменение (так что само изменение было тем, что я хотел).
Другой ответчик предложил нечто подобное, с одним важным отличием: пусть служба останется остановленной на некоторое время, в промежутках подтвердите, что сайт недоступен (чтобы увидеть, что на самом деле этот сайт обслуживает IIS). Однако для меня результат был таким же.
Убиваем правильный процесс IIS Вкратце, последняя альтернатива, которую я рассмотрел, - это убить процесс svchost для iis, поскольку это кажется довольно грубым решением. Я пробовал это и убил "svchost.exe -k iissvcs
", но это тоже не сработало. Но, возможно, я просто убил не тот процесс.
Изменение настроек AppPool
В пуле приложений для моего приложения не задан параметр по умолчанию "Load User Profile = False
"работает под NetworkService
личность. Я не уверен (даже после прочтения встроенного объяснения), что делает этот параметр, но могу представить, что он каким-то образом повлиял на PATH
переменная, которую видит мое приложение. Увы, установив его на True
ничего не решила.
Чтобы добавить некоторые последние детали на тот случай, если они важны. В моем сценарии я пытаюсь начать bcp.exe
с чем-то в этом роде:
using (var process = new Process())
{
process.StartInfo.FileName = "bcp.exe";
process.StartInfo.Arguments = myArguments;
process.StartInfo.UseShellExecute = false;
process.Start();
// Code to handle the process exiting and use the output.
}
Нам требуется BCP версии 11, но на сервере была версия 10. Инструмент имеет автономный установщик, который добавляет следующие важные элементы в PATH
:
C:\Program Files\Microsoft SQL Server\110\Tools\Binn
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
Это невозможно.
Переменные среды наследуются от родительских процессов (вплоть до процесса входа в систему) во всех современных ОС (afaik), если вы измените переменную, вы должны убедиться, что сеанс, в котором запущен процесс, перезапущен (вид выхода из системы и включения).
Поскольку IIS основан на services.exe, вы не сможете сделать это без перезапуска (удаление services.exe запрещено).
Вот это КБ об этом.
Я столкнулся с той же проблемой только сейчас и прочитал статью базы знаний, указанную в ответе Нитца. Это меня взволновало, потому что в этой статье конкретно упоминаются процессы, выполняющиеся как «Локальная система». В моем случае я запускаю свои пулы приложений под определенными учетными записями пользователей (делает возможным вход в SQL Server без пароля в файле конфигурации), и я знал, что в пуле приложений есть параметр «Загрузить профиль пользователя», который по умолчанию имеет значение «false». Установите для этого параметра значение true, и теперь повторное использование моего пула приложений, похоже, отлично помогает.
Таким образом, если вы можете запустить пул приложений под другим пользователем, а не «локальной системой», это может решить проблему.
Если iisreset
действительно не работает, то попробуйте перезапустить службу W3SVC (в services.msc
). По сути, это полный перезапуск IIS.