在azure web角色中设置系统变量%PATH%

时间:2015-10-04 19:09:20

标签: powershell azure path azure-web-roles system-variable

我在Azure上的文件夹中有一些软件包,我想将该路径添加到VM的%PATH%系统变量中,我必须以编程方式执行此操作才能使我的代码能够使用这些软件包。我已经使用POWERSHELL命令将文件夹路径添加到%PATH%变量,但问题是编辑%PATH%时必须重新启动进程才能使进程获取新的%PATH%。

现在我在Azure Web角色上,我该如何处理它? 我应该使用以下方式重新启动/回收我的网络角色:

RoleEnvironment.RequestRecycle();

但这样POWERSHELL脚本会再次运行并重置%PATH%??有没有其他方法可以添加文件夹到%PATH%变量的路径,并且该过程使用它而无需重新启动/回收?

P.S。我已经尝试过set / setx命令。 “setx”确实需要重新启动,“set”只设置当前会话的路径,因此两者都不适用于我。

1 个答案:

答案 0 :(得分:1)

我已经解决了我的问题。在这里添加答案,以便它可能对其他人有用。

每当您向%PATH%系统变量添加文件夹路径时,它都会广播

  

WM_SETTINGCHANGE

向所有顶级窗口发送消息,以告知他们有关更改的信息。但是,除非重新启动,否则广播此消息的过程不会获得更新的PATH值。在Azure上,我做的是我停止了 WindowsAzureGuestAgent 进程并从我的Web角色的OnStart()方法再次立即启动它(大约需要15-20秒才能重新启动)。

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

这样我获得了PATH变量的更新值,我的问题就解决了。