C ++ Выполнение внешнего процесса - PullRequest
1 голос
/ 25 февраля 2012

Я пытаюсь запустить исполняемый файл из программы на c ++. Я посмотрел и нашел 2 варианта:
Система ( "C: \ путь_к_файлу \ file.exe");
и
ShellExecute (GetDesktopWindow (), "open", "C: \ filepath \ file.exe", NULL, NULL, SW_SHOWNORMAL);
Все красиво, кроме того, что не работает.
Для первого варианта я должен был включить, кроме windows.h, также cstdlib, иначе мой код не собирался.
Когда я запускаю программу, я получаю сообщение об ошибке:
"file.exe" не распознается как внутренняя или внешняя команда
Я установил опцию Common Language Runtime Support (/ clr) для моего проекта (и мне также пришлось установить опцию Многопоточная отладочная DLL (/ MDd) для Runtime Library, иначе опять не будет собираться).
Второй вариант не будет собран даже с включенными обеими библиотеками. Я получаю ошибку:
ошибка C3861: «ShellExecute»: идентификатор не найден

Я использую VS2010 на Windows7 - и хотел бы, чтобы это работало на мультиплатформенности ...

Я слишком много спрашиваю?
Спасибо.

Ответы [ 3 ]

2 голосов
/ 25 февраля 2012

Когда я запускаю программу, я получаю сообщение об ошибке: "file.exe" не распознается как внутренняя или внешняя команда

Если я запускаю приглашение командной строки и набираю file.exe , то получаю:

Microsoft Windows [Version 6.1.7100]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\>file.exe
'file.exe' is not recognized as an internal or external command,
operable program or batch file.

C:\>
1 голос
/ 09 марта 2012

Обратите внимание, что я написал в своем вопросе: я установил опцию Common Language Runtime Support (/ clr).Я сделал это из-за предыдущей ошибки, предложившей это.
Как только я удалил эту опцию, я смог запустить исполняемый файл.Возможно, неуправляемый код должен остаться неуправляемым ...

1 голос
/ 25 февраля 2012

Вам необходимо заменить обратные косые черты на двойные, в противном случае компилятор интерпретирует их как escape-последовательности:

system("C:\\filepath\\file.exe");

Что касается ShellExecute, вам нужно включить Shellapi.h, а также Windows.h,и вам не нужно устанавливать флаг /clr.ShellExecute является частью Windows API, поэтому он не будет работать на других платформах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...