Выполните другую программу в C++

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

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

Заранее спасибо, Russo

7
задан Russo 11 February 2010 в 12:51
поделиться

3 ответа

Если вы используете CreateProcess следующим образом:

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

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

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

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

8
ответ дан 6 December 2019 в 11:49
поделиться

В таких языках, как Emacs Lisp и Common Lisp, специальные формы являются встроенными языковыми конструкциями. Они имеют различные правила анализа, которые вызывает обычная функция. Для обычных вызовов функций вычисляются все аргументы. Таким образом, нельзя записать ПЧ как нормальную функцию - условие определяет, какое предложение будет вычислено. Также обычно нельзя писать собственные специальные формы - в Common Lisp отсутствует языковая конструкция для определения специальной формы (хотя отдельные реализации должны были каким-то образом реализовать существующие. Это приводит к появлению макросов. С помощью макросов можно записать синтаксическое преобразование, которое преобразует одно выражение в другое. Чтобы иметь возможность писать IF как макрос, необходимо иметь другую условную форму, которую можно использовать для преобразованного кода. Лисп предоставляет условия в качестве базовых конструкций. Предположим, что COND является такой базовой конструкцией, тогда можно расширить IF в использование COND.

MY-IF как макрос в Common Lisp:

(defmacro my-if (condition true-clause false-clause)
   `(cond (,condition ,true-clause)
          (t ,false-clause)))

Поэтому

(my-if (foo-p) 'one 'two)

расширяется в

(cond ((foo-p) 'one)
      (t 'two))
-121--2461708-

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

-121--3853782-

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

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

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

1
ответ дан 6 December 2019 в 11:49
поделиться

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

7
ответ дан 6 December 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: