我的操作系統是Win7 x64。我有兩個名爲ComHost.exe和ClientApp.exe的exe文件。如何使COM主機進程避免繼承父進程的環境變量
ComHost.exe是一個獨立的exe文件,也是進程外COM的COM主機。
ClientApp.exe通過調用CoCreateInstance(...)來創建COM實例。當創建COM實例時,ComHost.exe進程啓動。
在windows環境變量中,有一個變量「AppStatus = status1」。
在ClientApp.exe的實施,代碼就是這樣
int ret = putenv("AppStatus=status2"); // Change the environment variable.
// do something
CoCreateInstance(...); // Start ComHost.exe
在ComHost.exe的實施,我的代碼
char * pStatus = getenv("AppStatus");
案例1獲得viriable值:如果通過雙擊啓動ComHost.exe,pStatus的值爲「status1」。
案例2:如果啓動ClientApp.exe中的ComHost.exe,則pStatus的值爲「status2」。它繼承父級進程ClientApp.exe的環境變量。
我的問題是:
我想ComHost.exe總是讀由OS不是從父進程繼承值定義的變量值。這意味着,在情況2中,我想要得到值「status1」。可能嗎?
可能的,當然。我認爲你在這裏使用環境變量傳遞狀態的方法錯誤 - 首先,你用你的狀態來污染所有的應用程序,其次,一旦主機進程運行,你就不能更新狀態。 – 2011-12-30 08:50:19
我拿變量AppStatus作爲例子就是讓事情變得容易理解。 – Jeffrey 2011-12-30 09:06:11
我的觀點依然存在 - 很可能使用環境變量不是解決方案。很多時候,這裏發佈的問題已經被劃分爲一個簡單和困難(或不可能)的部分,後者被問到,同時查看整個問題會告訴我們解決方案的第一部分其實是錯誤的。 – 2011-12-30 09:36:19