2012-11-06 19 views
3

我正在調用像這樣外部流程的應用程序:通定製環境變量的System.Diagnostics.Process

ProcessStartInfo startInfo = new ProcessStartInfo(PathToExecutable, Arguments){ 
    ErrorDialog = false, 
    RedirectStandardError = true, 
    RedirectStandardOutput = true, 
    UseShellExecute = false, 
    CreateNoWindow = true, 
    WorkingDirectory = WorkingDirectory 
}; 

using (Process process = new Process()) { 
    process.StartInfo = startInfo; 

    process.Start(); 
    process.BeginErrorReadLine(); 
    process.BeginOutputReadLine(); 
    process.WaitForExit(); 

    return process.ExitCode; 
} 

一個我打電話的過程取決於一個環境變量,我d而不是要求我的用戶設置。有沒有辦法修改發送到外部進程的環境變量?理想情況下,我可以讓它們只對正在運行的進程可見,但如果我必須以編程方式將它們設置爲系統範圍,那麼我會解決這個問題(但是,UAC是否會迫使我以管理員身份運行? )

ProcessStartInfo.EnvironmentVariables是隻讀的,所以很多的幫助,這是...

+0

你沒有對外部進程控制?否則,如果你這樣做,爲什麼你不能通過它作爲一個論據呢? –

回答

3

你可以將它添加雖值。

MSDN ProcessStartInfo.EnvironmentVariables Property

雖然你不能設置EnvironmentVariables屬性,您可以 修改由屬性返回的StringDictionary。例如,以下代碼 添加了TempPath環境變量: myProcess.StartInfo.EnvironmentVariables.Add("TempPath", "C:\\Temp")。 必須將UseShellExecute屬性設置爲false以在更改EnvironmentVariables屬性後啓動 過程。如果 UseShellExecutetrue,則在調用Start方法時調用 時會引發InvalidOperationException。

+0

謝謝。不知何故,我錯過了。我想我停止閱讀上面那行,「默認爲空」。聽起來像默認值實際上是一個空字典。 –

1

您可以使用索引設置環境變量:

process.StartInfo.EnvironmentVariables['name'] = value;