2016-08-26 9 views
2

Я хочу начать процесс со следующего пути.Начать процесс с переменной окружения

"ProgramFiles (x86) \ Philips Speech \ Device Control Center PDCC.exe"

Когда я печатаю это в консоли процесс начинается, как ожидается, но когда я пытаюсь сделать это в коде получаю следующее исключение:

система не может найти указанный файл

Это я мой код до сих пор:

var startInfo = new ProcessStartInfo("%ProgramFiles(x86)%\Philips Speech\Device Control Center PDCC.exe"); 
Debug.Assert(startInfo.EnvironmentVariables.ContainsKey("ProgramFiles(x86)")) //Is true 
new Process(startInfo).Start(); //<- exception occures here 

Есть ли у кого-нибудь идеи, могу ли я сделать это напрямую, предоставив классу ProcessStartInfo переменную окружения или если я должен ее проанализировать до этого?

ответ

4
string path = Environment.ExpanEnvironmentVariables("%ProgramFiles(x86)%\Philips Speech\Device Control Center PDCC.exe"); 
var startInfo = new ProcessStartInfo(path); 
new Process(startInfo).Start(); 

Таким образом, вы можете использовать переменные (например "%ProgramFiles(x86)%) и не зависит от папки, находящейся в C:\ или что-то.

+0

Как я сохраняю свой путь inc luding переменная окружения в настройках, я пойду за вашим решением также потому, что это чисто – NtFreX

2

Конструктор просто устанавливает свойство fileName тому, что вы передаете, поэтому да, сначала вам нужно будет разрешить переменную окружения.

От the source code for ProcessStartInfo:

public ProcessStartInfo(string fileName) { 
    this.fileName = fileName; 
} 
0

Или попробовать это, если вы хотите такое же поведение, как Start -> Пробег

Environment.ExpandEnvironmentVariables("%windir%\System32") 
Смежные вопросы