2010-03-26 5 views
2

Я пытаюсь создать приложение формы C#, которое позволит мне использовать все мои предыдущие программы на C++ из одной центральной программы.Execute C++ exe из формы C# с помощью Process.start()

Я могу открыть exes с помощью Process.Start(), однако он не скомпилирует код правильно.

Пример кода:

Process.Start("C:\\\Documents and Settings\\\dan\\\Desktop\\\test.exe"); 

Это приведет консоль и действовать, как он работает, но он не работает, как, когда я обычно компилировать из редактора C++. Есть ли переменная startinfo, которую мне нужно установить, чтобы обозначить, что это программа на C++ или что-то в этом направлении?

Кроме того, есть ли способ выполнить программу на C++ с использованием process.start, которая позволит мне передать переменные через командную строку через argc и argv?

Благодаря

+0

Что значит означать, что вы говорите, что оно не работает одинаково? Какая разница? –

+1

@ Dan: Почему ваш C++ test.exe знает или заботится о том, чтобы он был написан на C++ и на любом другом языке? Какая разница между тем, что вы видите, и тем, что вы ожидаете? –

+0

Он не полностью запускается, он просто выводит консоль, выводит строки первой строки и останавливает их, не работает полностью, чтобы создать выход. Я попробовал это с несколькими разными версиями C++, которые дают одинаковый результат. – Dan

ответ

5

Там только несколько различий при использовании Process.Start как вы это делали против, когда вы просто выполняете программу напрямую. Оба могут быть устранены с помощью ProcessStartInfo.

  1. WorkingDirectory не будет таким же. Установите это путь, содержащий исполняемый файл, чтобы получить такое же поведение.
  2. Установите UseShellExecute в true, поэтому оболочка окон используется для выполнения процесса.

Что касается добавления аргументов командной строки: вы можете сделать это через ProcessStartInfo.Arguments. Однако не должно быть одного из требований, поскольку это приложение C++.

+0

Спасибо, изменив рабочий каталог и установив оболочку в true, он работал правильно. Еще раз спасибо за быстрый ответ. – Dan

1

Пока есть только достаточно информации, чтобы ответить на ваш последний вопрос. Да, вы можете включить аргументы командной строки как shown here. Обратите внимание на раздел под названием «=== Программа, которая работает EXE (C#) ===»

1

Чтобы добавить аргументы командной строки:

Process process = new Process(); 
process.StartInfo.FileName = "C:\\Documents and Settings\\dan\\Desktop\\test.exe"; 
process.StartInfo.Arguments = ""; // Put your arguments here 
process.Start(); 
0

После того, как программа была скомпилирована в EXE, это не имеет значения, на каком языке она написана.

Что же касается аргументов программы, вы должны взглянуть на класс ProcessStartInfo и переопределение of Process.Start(), который его использует: Process.Start(ProcessStartInfo)

0

Я столкнулся с аналогичной проблемой в python, ожидаете ли вы подробный вывод?

В моем случае выходной буфер заполнен и, следовательно, выполнение остановилось.

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