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

Powershell 在azure web角色中设置系统变量%PATH%,powershell,azure,path,azure-web-roles,system-variable,Powershell,Azure,Path,Azure Web Roles,System Variable,我在Azure上的文件夹中有一些包,我想将该路径添加到VM的%path%系统变量中,我必须以编程方式执行该操作,以便我的代码能够使用这些包。我已使用POWERSHELL命令将文件夹路径添加到%path%变量中,但问题是当您编辑%path%时,必须重新启动进程才能获取新的%path% 现在我在Azure Web角色上,我该如何处理它? 我是否应该使用以下方式重新启动/回收我的web角色: RoleEnvironment.RequestRecycle(); 但这样,POWERSHELL脚本将再次运

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

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

RoleEnvironment.RequestRecycle();
但这样,POWERSHELL脚本将再次运行并重置%PATH%??是否有其他方法可以将文件夹的路径添加到%path%变量中,并且流程使用它而无需重新启动/回收


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

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

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

WM_设置更改

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

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

通过这种方式,我得到了PATH变量的更新值,我的问题得到了解决。

您不能使用startup task添加一个新的环境变量,并在代码中使用该变量,而不是修改%PATH%?这是可行的,但这不会解决我的问题,因为我使用的是R,它必须搜索PATH变量才能找到到的实际路径包含R-packages的文件夹,所有这些都发生在R内部,我不处理这些。