2008-09-25 78 views
3

我正在開發一個自動構建器,它將在構建過程中運行一系列步驟並構建我們的目標應用程序。我們曾經使用過一個批處理文件,它建立了一堆環境變量或叫做工具來設置環境變量,並最終運行一個'make'。如何在C#中運行一系列進程並保持其環境設置?

我一直在使用'Process'類,它非常適合運行這些命令,但不幸的是,每次運行時都會對環境進行更改(如向PATH中添加某些內容),但當'Process'完成。下一個'Process'被實例化並且再次從'調用'應用程序(我的exe)繼承env - 這意味着所有由最後一個命令設置的env都會丟失。你如何處理這種情況?有沒有更好的方法在C#中運行一系列批處理文件類似的命令並維護它們設置的環境?

請不幸注意,老高中生已宣佈楠/螞蟻是不是一種選擇,那麼「嘿,爲什麼不使用南特 - 它確實是」是不是我正在尋找的答案。

謝謝。

回答

0

我會建議一些代碼,將你的環境變量保存到外部文件,然後你可以在以下過程開始通過獲取外部文件這些變量。

0

那麼,System.Environment.SetEnvironmentVariable()方法將允許您爲您設置的變量指定範圍。這是你想要的?不知道我明白。

0

我們使用CruiseControl.net運行NAnt腳本。強烈推薦。

可以使用-D:命令行開關調用NAnt腳本以設置環境變量的等效值。

+0

有沒有辦法用MSBuild來做到這一點?我認爲反NAnt陣營不會介意使用它,因爲它來自MS。 – 2008-09-26 05:01:24

0

我認爲問題不在於指定自定義環境變量。 (您可以通過ProcessStartInfo設置它們。)問題在於讀取正在運行的進程對環境變量所做的更改。我不確定是否有可能。我知道的唯一方法是爲流程本身和/或其子流程設置環境變量。我不知道沒有辦法爲父進程設置環境變量。

+0

是的 - 如果有辦法從先前運行的進程中獲取修改的變量,這將是一個很好的解決方案,但我沒有看到任何方式來做到這一點。 – screenglow 2008-09-25 22:32:42

0

從不設置環境變量,也不能爲父進程(*)設置環境變量。只有當前過程和它創建的過程 - 這是概念的一部分。 (*)除了OS-internals之外,可能還有其他的東西。

相關問題