2012-10-21 40 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上,如果該服務未在遠程計算機上運行,​​則會收到「錯誤:指定的操作無法完成」。