2015-10-22 2 views
1

Как передать переменные окружения в качестве аргументов в System.Diagnostics.Process()? По какой-то причине использование пути переменной не работает. Например, я пытаюсь открыть проводник на пути% WINDIR%, это не удается:System.Diagnostics.Process(); StartInfo.Arguments использует переменные среды как аргумент

программа: explorer.exe арг:/п/е,% WINDIR%

var f = new System.Diagnostics.Process(); 
f.StartInfo.WorkingDirectory = Path.GetDirectoryName(Program); 
f.StartInfo.FileName = Program; 
f.StartInfo.Arguments = !string.IsNullOrWhiteSpace(Params) ? Params : null; 
f.Start(); 
+0

Интерпретация% windir% - это команда командного процессора Cmd.exe. Вам нужно будет сделать это самостоятельно, используйте Environment.GetFolderPath(). Или используйте параметр командной строки Cmd.exe,/c. –

+0

Возможный дубликат [Как получить и установить переменные среды в C#?] (Http://stackoverflow.com/questions/185208/how-do-i-get-and-set-environment-variables-in-c) –

ответ

0

Как комментатор Ханс Пассант говорит, что синтаксис, подобный %windir%, специфичен для процессора командной строки. Вы можете эмулировать его в своем собственном коде, вызвав Environment.GetEnvironmentVariable("windir") (т. Е. Получить текущее значение переменной окружения WINDIR) или Environment.GetFolderPath(SpecialFolder.Windows) (т. Е. Чтобы Windows сообщила путь к известной специальной папке).

Если вы хотите, чтобы процессор командной строки выполнял работу, вам нужно запустить процессор командной строки. Например .:

f.StartInfo.FileName = "cmd.exe"; 
f.StartInfo.Arguments = "/c explorer.exe /n /e /select,%windir%"; 

Это будет работать cmd.exe, который, в свою очередь, запустит процесс explorer.exe от вашего имени, разбором выражения %windir% как переменное разыменование среды.

Смежные вопросы