2011-11-21 65 views
0

這裏是上下文。我們使用我們的應用程序來設置WMI的許多功能,包括環境變量。使用WMI設置環境變量不起作用,直到我們繼續環境變量並按下確定

我們使用這個代碼(簡體),當我們打開一個命令提示符,我們沒有看到環境變量的值來設置可變

ManagementClass envClass = new ManagementClass(this.oConnector.Scope, new ManagementPath(WMIHelper.Win32Environment), null); 
ManagementObject mo = envClass.CreateInstance(); 
mo["Name"] = variable; 
mo["UserName"] = user; 
mo["VariableValue"] = value.Trim(); 
mo.Put(); 

的環境現在。如果我去打開計算機屬性並進入「環境變量」頁面,那麼它就在那裏。我按兩次確定,重新打開一個命令提示符,變量突然在那裏。

有人知道爲什麼會發生這種情況嗎?這幾乎就像在放置環境變量之後我們必須做其他事情來強制刷新或者其他東西。

感謝

+0

在原始的Windows應用程序,你需要做到這一點。將lParam設置爲字符串「Environment」來廣播WM_ SETTINGCHANGE消息。不確定WMI是什麼。 –

回答

0

你確定你是開始讀取環境變量之後設置它們的進程?

進程啓動時會複製Env vars,進程啓動後對系統的env vars所做的任何更改都不會被進程看到。 AFAIK,沒有辦法繞過這種行爲。通過打開一個新的cmd窗口,您將開始一個新的cmd.exe進程,該進程獲取變量的新值。

+0

當然,我們在設置它們之後開始執行cmd.exe。但請記住,我們正在通過WMI設置env var,而不是通過將它輸入到Microsoft的Env Var UI中。我在這方面做了大量的研究,似乎強制升級的唯一方法是調用WinSendMessage。所以現在我試圖找到一種方式來調用wmi的WinSendMessage – Escristian