Если я перейду в меню "Пуск"> "Выполнить" и введите
C:\folder\Program.exe A = 1
Моя программа работает.
Он также работает, если я создаю ярлык для.exe и редактирую Свойства, чтобы добавить A=1
в целевой путь.
Однако, если я попытаюсь запустить
var p = new Process();
p.StartInfo.FileName = @"C:\folder\Program.exe";
p.StartInfo.Arguments = "A=1"
p.Start();
или
Process.Start(@"C:\folder\Program.exe, "A=1");
это не так.
В чем разница между этими двумя вызовами и как я могу изменить свой кодовый вызов, поэтому он работает точно так же, как при вводе значения в "Пуск"> "Выполнить"?
Повторная отправка комментария в качестве ответа (и перефразирования):
В отличие от оболочки explorer Start-> Run, которая автоматически устанавливает текущий рабочий каталог в ту же папку, где находится целевой исполняемый файл,.NET Process.Start
этого не делает. Это часто случается, когда исполняемый файл пытается загрузить ресурсы по сравнению с текущей рабочей папкой и ожидает, что он будет таким же, где находится исполняемый файл (например, загружать файлы конфигурации, библиотеки DLL и библиотеки и т.д.), Что приводит к сбоям или другим сбоям.
Используйте StartInfo.WorkingDirectory
чтобы указать рабочую папку, в которой находится исполняемый файл, и 9 из 10 раз, и все будет!
Yeap, я несколько раз наступал на этот грабли...