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