2015-10-04 3 views
1

У меня есть несколько пакетов в папке на Azure, и я хочу добавить этот путь к системной переменной% PATH% VM, которую я должен делать программно, чтобы мой код был в состоянии использовать эти пакеты. Я сделал добавление пути папки к переменной% PATH% с помощью команд POWERSHELL, но проблема в том, что вы редактируете% PATH%, вам нужно перезапустить процесс, чтобы процесс приобрел новый% PATH%.Установить Системную переменную% PATH% в лазурной веб-роли

Теперь, когда я на роли Azure Web, как мне с этим бороться? Должен ли я перезагрузить/переработать мой веб-роль с помощью:

RoleEnvironment.RequestRecycle(); 

Но этот путь сценарий Powershell будет работать снова и сбросить% PATH% ?? Есть ли другой способ добавить путь папки к переменной% PATH%, и процесс использует ее без необходимости перезапуска/повторного использования?

p.s. Я уже пробовал команды set/setx. «setx» требует перезапуска, а «set» просто устанавливает путь для этого текущего сеанса, так что оба не работают для меня.

+0

Не можете ли вы добавить новую переменную среды с помощью задачи запуска и использовать эту переменную в своем коде вместо изменения% PATH%? –

+0

Ну, это выполнимо, но это не решит мою проблему, потому что я использую R, и он должен искать переменную PATH, чтобы найти фактический путь к папке с R-пакетами, и все это происходит внутри R, что я не обработки. – Sarmad

ответ

1

Я решил свою проблему. Добавление ответа здесь, чтобы оно могло быть полезным для других.

Всякий раз, когда вы добавляете путь к папке в переменную% System% PATH он передает WM_SETTINGCHANGE

сообщение

ко всем окнам верхнего уровня для того, чтобы сказать им об изменениях , Однако процесс, транслирующий это сообщение, не получает обновленное значение PATH, если оно не перезапущено. На Azure я сделал то, что я остановил процесс WindowsAzureGuestAgent и начал его немедленно снова (требуется около 15-20 секунд для перезапуска) из метода OnStart() моей веб-роли.

var theController = new System.ServiceProcess.ServiceController("WindowsAzureGuestAgent"); 
    theController.Stop(); 
    theController.Start(); 

Таким образом, я получил обновленное значение переменной PATH, и моя проблема была решена.