我在Azure上的文件夹中有一些软件包,我想将该路径添加到VM的%PATH%系统变量中,我必须以编程方式执行此操作才能使我的代码能够使用这些软件包。我已经使用POWERSHELL命令将文件夹路径添加到%PATH%变量,但问题是编辑%PATH%时必须重新启动进程才能使进程获取新的%PATH%。
现在我在Azure Web角色上,我该如何处理它? 我应该使用以下方式重新启动/回收我的网络角色:
RoleEnvironment.RequestRecycle();
但这样POWERSHELL脚本会再次运行并重置%PATH%??有没有其他方法可以添加文件夹到%PATH%变量的路径,并且该过程使用它而无需重新启动/回收?
P.S。我已经尝试过set / setx命令。 “setx”确实需要重新启动,“set”只设置当前会话的路径,因此两者都不适用于我。
答案 0 :(得分:1)
我已经解决了我的问题。在这里添加答案,以便它可能对其他人有用。
每当您向%PATH%系统变量添加文件夹路径时,它都会广播
WM_SETTINGCHANGE
向所有顶级窗口发送消息,以告知他们有关更改的信息。但是,除非重新启动,否则广播此消息的过程不会获得更新的PATH值。在Azure上,我做的是我停止了 WindowsAzureGuestAgent 进程并从我的Web角色的OnStart()方法再次立即启动它(大约需要15-20秒才能重新启动)。
var theController = new System.ServiceProcess.ServiceController("WindowsAzureGuestAgent");
theController.Stop();
theController.Start();
这样我获得了PATH变量的更新值,我的问题就解决了。