Запустите C ++ exe из C # формы с помощью Process.start()
-
22-09-2019 - |
Вопрос
Я пытаюсь создать приложение C # form, которое позволит мне использовать все мои предыдущие программы на C ++ из одной центральной программы.
Я могу открыть бывшие с помощью Process.Start()
, однако он неправильно компилирует код.
Пример кода:
Process.Start("C:\\\Documents and Settings\\\dan\\\Desktop\\\test.exe");
Это вызовет консоль и будет действовать так, как будто она запущена, но она работает не так, как при обычной компиляции из редактора C ++.Существует ли startinfo
переменная, которую мне нужно установить, чтобы указать, что это программа на C ++ или что-то в этом роде?
Кроме того, есть ли какой-либо способ выполнить программу на C ++ с использованием process.start
это позволит мне передавать it-переменные через командную строку через argc
и argv
?
Спасибо
Решение
Есть только пара отличий при использовании Process .Начните так, как вы делали, в отличие откогда вы просто выполняете программу напрямую.И то, и другое может быть устранено с помощью Информация о запуске процесса.
- В Рабочий каталог уже не будет прежним.Установите это значение в путь, содержащий исполняемый файл, чтобы получить такое же поведение.
- Установить Используйте ShellExecute имеет значение true, поэтому для выполнения процесса используется оболочка Windows.
Что касается добавления аргументов командной строки:Вы можете сделать это с помощью ProcessStartInfo.Аргументы.Однако оно не должно быть обязательным из-за того, что это приложение на C ++.
Другие советы
Пока информации достаточно только для того, чтобы ответить на ваш последний вопрос.Да, вы можете включить аргументы командной строки как показано здесь.Посмотрите на раздел под названием "=== Программа, которая запускает EXE (C #) ===".
Чтобы добавить аргументы командной строки:
Process process = new Process();
process.StartInfo.FileName = "C:\\Documents and Settings\\dan\\Desktop\\test.exe";
process.StartInfo.Arguments = ""; // Put your arguments here
process.Start();
После того, как программа была скомпилирована в EXE, не должно иметь значения, на каком языке она была написана.
Что касается аргументов программы, вам нужно взглянуть на класс ProcessStartInfo и переопределение Process.Start(), который его использует: Процесс.Запуск (ProcessStartInfo)
Я столкнулся с аналогичной проблемой в python, вы ожидаете подробного вывода?
В моем случае выходной буфер был заполнен, и, следовательно, выполнение остановилось.