1

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

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

RoleEnvironment.RequestRecycle();

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

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

4

1 回答 1

1

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

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

WM_SETTINGCHANGE

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

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

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

于 2015-10-08T12:50:17.903 回答