Выполнить другую программу на C ++ - PullRequest
7 голосов
/ 11 февраля 2010

Я хочу удаленно выполнить другое приложение из моей программы на C ++. До сих пор я играл вместе с функцией CreateProcess (...), и она прекрасно работает.

Проблема, однако, в том, что мне нужен полный путь к другой программе, но я не знаю ее директорию. Так что я хочу, чтобы мне просто нужно было ввести имя другой программы, например, когда вы вводите «cmd» или «winword» в «Выполнить» ... она открывает соответствующие программы.

Спасибо заранее, Руссо

Ответы [ 4 ]

8 голосов
/ 11 февраля 2010

Если вы используете CreateProcess, как это:

CreateProcessA( "winword.exe", .... );

тогда переменная PATH не будет использоваться. Вам нужно использовать второй параметр:

CreateProcessA( NULL, "winword.exe", .... );

Подробнее см. http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx.

7 голосов
/ 11 февраля 2010

Вы ищете ShellExecute(). Это даже сработает, если вы передадите ему правильный URL, как в меню «Выполнить».

1 голос
/ 12 марта 2013

Запуск программ и подсчет PATH любым способом считается небезопасным кодированием. Системные PATH могут быть загрязнены местоположениями, которые не защищены должным образом, например сетевым диском. Лучший способ запустить приложение - запустить исполняемый файл именно там, где он стоит, и установить для CWD местоположение исполняемого файла в том виде, в котором оно установлено. В противном случае вы могли бы запускать вредоносный код.

Скорее всего, некоторая комбинация информации отсюда поможет правильно определить местоположение: Обнаружение установленных программ через реестр

Грег

1 голос
/ 11 февраля 2010

Каталоги программ, которые вы можете запустить при запуске -> запустить, добавляются в переменную PATH. Вы можете добавить папку, в которой находится ваша программа, в PATH, а затем использовать CreateProcess (). Однако вы говорите, что не знаете каталог, поэтому, вероятно, вы не можете этого сделать.

Знаете ли вы частичный путь? Например, знаете ли вы, что ваш exe всегда будет в C: \ что-то \ что-то \ или подпапке этого пути? Если это так, ищите FindFirst () и FindNext (), чтобы вывести список всех файлов в этом каталоге и выполнить поиск вашего exe-файла, затем используйте CreateProcess (), когда вы найдете свой exe-файл.

http://msdn.microsoft.com/en-us/library/aa365200%28VS.85%29.aspx показывает, как составить список файлов в каталоге. Вам придется изменить его также для поиска в подкаталогах (например, сделать рекурсивную функцию).

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