2012-10-21 43 views
0

我试图在远程机器上设置环境变量。更改远程Windows机器上的环境变量

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 

很奇怪,因为它是在两台机器上相同的域,用户名和密码;它不起作用 - 没有说什么,但我仍然无法在本地机器上看到环境。

任何想法都会受到欢迎。

+0

您可能需要在登录用户会话的上下文中调用SendMessageTimeout。不幸的是,这对代码并不容易,如果按照这种方式进行操作,则可能需要先查看WTSQueryUserToken函数(在这种情况下,您应该使用-se选项指向psexec)。或者,使用-i选项的psexec可能会起作用,但您需要先找出用户登录的会话。 –

回答

0

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