2013-05-08 46 views
0

我正在使用一個C#dll,我使用Installshield將Oracle路徑添加到Path環境系統變量中以便能夠由於即時客戶端連接到Oracle數據庫。我想修改路徑環境系統變量,而無需重新啓動或重新啓動cmd,因爲c#

Whan我第一次運行安裝程序它不成功,但更改爲路徑變量。它在第二次嘗試中成功,因爲路徑已經從第一次運行中更改。 因此得出的結論是Oracle數據庫提供者在用代碼修改後不直接查看更改。

我想要一種方法來檢測路徑變量的變化,而不需要第二次嘗試安裝。

var ancientPath = Environment.GetEnvironmentVariable("path", EnvironmentVariableTarget.Machine); 

Environment.SetEnvironmentVariable("path", ancientPath + ";" + tmp, EnvironmentVariableTarget.Machine); 
+0

var ancientPath = Environment.GetEnvironmentVariable(「path」,EnvironmentVariableTarget.Machine); Environment.SetEnvironmentVariable(「path」,ancientPath +「;」+ tmp,EnvironmentVariableTarget.Machine); – 2013-05-08 14:08:56

回答

0

你想要做的是明確不可行。一個進程可以修改它自己的環境,它可以產生具有不同環境的進程,但沒有進程可以改變另一個進程的環境。在首次安裝後啓動新進程時,應該會看到更新的路徑。

如果您希望現有進程使用新的環境變量,則必須重新啓動它。如果您的安裝程序由於缺少路徑信息而失敗,那麼您將不得不解決該問題。

+0

我試圖在修改相同方法中的路徑變量之後創建一個OracleConnection,我想這意味着它在同一個進程中,不是嗎?當我記錄新的路徑值時,我發現它發生了變化,但不幸的是,OracleConnection的新實例失敗,但是當我重新啓動整個設置而不僅僅是方法調用時它會通過。 – 2013-05-08 15:04:37

+0

有沒有辦法將這種改變傳播給父進程? – 2013-05-08 15:12:17

+0

「失敗」究竟意味着什麼? – 2013-05-08 15:18:11

0

嘗試發送WM_SETTINGCHANGE消息到所有窗口,如following MSDN article中所述。

SendMessageTimeout(HWND_BROADCAST,WM_SETTINGCHANGE,0, (LPARAM) 「環境」,SMTO_ABORTIFHUNG, 5000,& dwReturnValue);

相關問題