更改远程Windows计算机上的环境变量

更改远程Windows计算机上的环境变量,windows,environment-variables,psexec,setx,Windows,Environment Variables,Psexec,Setx,我正在尝试在远程计算机上设置环境变量 setx /s machine var value 不工作-它不产生输出,也不做任何事情 psexec \\machine setx var value 表示已成功更改值。但是,当我打开机器并打开cmd时,它没有显示它。它确实出现在计算机->属性->高级->环境变量中。还有,当我跑步的时候 psexec \\machine cmd /c set 它写得正确 我编写了一个名为RefreshEnvironment.exe的程序,它基本上执行以下操作:

我正在尝试在远程计算机上设置环境变量

setx /s machine var value
不工作-它不产生输出,也不做任何事情

psexec \\machine setx var value
表示已成功更改值。但是,当我打开机器并打开cmd时,它没有显示它。它确实出现在计算机->属性->高级->环境变量中。还有,当我跑步的时候

psexec \\machine cmd /c set
它写得正确

我编写了一个名为RefreshEnvironment.exe的程序,它基本上执行以下操作:

    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
    (LPARAM) L"Environment", SMTO_ABORTIFHUNG,
    5000, &dwReturnValue);
如果我在本地机器上调用它,它就解决了问题——我在它之后打开cmd并获得正确的环境。然而,它不能远程工作。召唤

psexec \\machine RefreshEnvironment.exe
返回“访问被拒绝”。我只能在显式写入用户和密码的情况下运行它:

psexec \\machine -user domain\username -p password RefreshEnvironment.exe
非常奇怪,因为两台机器上的域、用户名和密码都相同;它不工作-没有说什么,但我仍然看不到本地机器上的环境


欢迎提出任何建议。

使用/s参数时,请确保目标计算机上正在运行“远程注册表”服务。这可能是你的问题的原因吗?在Windows 7上,如果该服务未在远程计算机上运行,我会收到一条“错误:指定的操作无法完成”。

您可能需要在登录用户会话的上下文中调用SendMessageTimeout。不幸的是,这不容易用代码实现;如果这样做,您可能希望首先查找WTSQueryUserToken函数(在这种情况下,您应该使用-s选项来psexec)。或者,psexec和-i选项也可以工作,但是您需要找出用户首先登录的会话。