Короче говоря, я пишу интерфейс для эмулятора MAME как исследование в WPF и C#.Process.Start и Process.StartInfo не правильно передают аргументы
Графический интерфейс настроен, он правильно считывает cfg, все в порядке, за исключением фактически запуска MAME.
Из командной строки (Windows 7) я могу ввести следующее и правильно запустить запуск эмулятора.
c:\MAME\Emulator\mame.exe mslug.zip
Это запускает эмулятор без проблем точно так же, как и предусмотрено. Однако я пробовал все следующее.
Process Mame = new Process(emulatorPath);
Mame.StartInfo.Arguments = romSelected;
Mame.Start();
Я попытался выше как с переменной и положить Mame.StartInfo.Arguments = «mslug.zip»
ProcessStartInfo Mame = new ProcessStartInfo(emulatorPath);
Mame.Arguments = romSelected;
Process.Start(Mame);
Я попытался это также и с переменной и ввода «mslug.zip» в его месте.
Наконец я попробовал следующее.
Process.Start(@"c:\Mame\emulator\mame.exe", "mslug.zip");
И действует так же, как и предыдущие попытки.
Если я не пытаюсь передать аргументы, программа запускается отлично и просто говорит мне, что не было романа. Любой из вышеперечисленных методов передачи аргументов привел к быстрому отображению командной строки, отображающему ту же информацию, что и в случае, если файл zip z был пуст.
Из того, что я прочитал о Process.Start и т. П., То, что я набрал выше, должно совпадать с открытием командной строки и ввода команды, с которой я начал этот пост. Но если это так, то это должно было работать без проблем. Я не уверен, что я делаю что-то неправильно или если есть лучший способ сделать это.
Примечание. Я также просмотрел графический интерфейс Windows и создал ярлык для mame.exe и отредактировал его свойства, чтобы передать mslug.zip в качестве аргумента, и он также работал, поэтому он не требует, чтобы это выполнялось через насколько я могу судить по командной строке.
Как утверждают, у меня есть отлаженные текстовые поля в gui приложения, которые обновляются переменными, используемыми в моем коде, чтобы проверить правильность переменных.
Обновление:
Я хотел добавить, что программа (для тех, кто не знаком) полагается на имя файла rom, который вы пытаетесь запустить. Значение передачи аргумента mslug.zip заставляет программу перейти в собственный каталог rom (в настоящее время C: \ mame \ emulator \ roms) и искать mslug.zip. Я могу запустить эту команду из любого каталога в моей системе и получить тот же результат. Я также могу пройти путь к рому, как
c:\mame\emulator\mame.exe c:\mame\emulator\roms\mslug.zip
Это также будет работать независимо от того, где я его запускаю. И я попробовал, что в моем коде, и при прохождении пути в качестве переменных и передавая их как
string romSelected = @"c:\mame\emulator\roms\mslug.zip";
Оба терпят неудачу в той же манере.
насчет ** рабочего каталога **? Из командной строки вы находитесь в каталоге, где 'mslug.zip', из вашего приложения вы находитесь в его рабочем каталоге (например, каталог bin/debug). –
Вы пробовали поиск в Google, есть много примеров того, как это сделать правильно, а также 'SO' http://stackoverflow.com/questions/15061854/how-to-pass-multiples-arguments-in- processstartinfo Мне интересно, если вы прошли через код и оценили все параметры и переменные и т. д. – MethodMan
@MethodMan: Вопрос, на который вы указываете, - это несколько параметров. Здесь есть только один. Код из OP в порядке. –