這一個看起來微不足道,但答案几乎沒有我了。更改調用進程的環境變量
我有一個Windows批處理文件,它調用一個C#程序來做一個額外的驗證,不能在批處理文件中完成。驗證完成後,我需要將狀態和字符串返回到調用shell。
現在返回值是微不足道的,我的C#控制檯應用程序只是設置一個返回值(如果您願意,退出代碼)。我認爲這個字符串也是小菜一碟。我試圖定義使用一個新的shell變量:
Environment.SetEnvironmentVariable("ERR", "Some text");
此調用應該(和做)的當前進程中定義一個shell變量 - 那就是創建的變量非常的C#程序。只要C#應用程序終止,創建C#應用程序的shell就會對該變量一無所知,該值就會丟失。所以......一個沒有特別用處的調用......根本......除非可能我從C3應用程序創建了一個子進程,否則它可能會繼承我的變量。
SetEnvironmentVariable調用的EnvironmentVariableTarget.Machine和EnvironmentVariableTarget.User目標也不能解決問題,因爲只有新創建的進程纔會從註冊表中獲取這些新值。
因此,唯一可行的解決方案,我能想到的是:
- 寫入stdout
- 寫入到文件
- 編碼額外的含義爲返回值
前兩個有點醜陋,最後一個有其侷限性和問題。
任何其他想法(如何在父進程中設置shell變量)?也許這樣的shell變量修改是一個安全問題(想想PATH)...
謝謝你的時間。
確實如此。控制檯應用程序的結果通常通過返回碼返回。顯然''Environment.Exit()'在框架上有點粗糙......所以一個簡單的'return x'是首選的方法。但是,我想知道是否有一種方法可以將**另一個值**推送到父shell環境中。例如錯誤代碼123以字符串形式的解釋... 我現在正在使用stdout ...將其重定向到一個文件,將其讀回到一個shell var,刪除該文件...略有骯髒,但它的作品。 – JamesH 2011-05-23 14:10:42