Как запустить внешний исполняемый файл (.exe) в C ++ - PullRequest
0 голосов
/ 11 мая 2011

Я не разработчик. Мы хотим (я и наша команда) написать инструмент на C ++, который может печатать PDF (отправить PDF на принтер). Мы пытались использовать внешний инструмент, такой как командная строка pdfprint.exe, используя CreateProcessW и cmd / c, но у нас есть проблема. В Windows XP у нас нет проблем с нашим инструментом, в Windows Vista у нас есть проблема, и мы не можем использовать такой инструмент, как pdfprint.exe.

Существуют различия между Windows XP и Vista для запуска внешних инструментов в другой программе с CreateProcessW и "cmd / c"?

Спасибо

Oronzo

Ответы [ 2 ]

1 голос
/ 12 июня 2011

Существует множество подходов для запуска внешнего приложения из вашей программы на C ++.Я буду считать их ниже.

  1. Win32API CreateProcess функция.Седрик Жюльен привел пример использования.
  2. exec * C / C ++ семейство функций.Они определены в стандарте POSIX.Таким образом, они одинаковы в Linux.Но поскольку в новой версии MSVC они устарели, попробуйте использовать аналогичную функцию _exec *.
  3. Собственный вызов API WiNT - NtCreateProcess.Он также вызывается в CreateProcess :-) И эта функция представляет более глубокий уровень API.Используя вызовы Native API, вы можете создавать небольшие и простые приложения, потому что вы будете создавать меньшее количество зависимостей вашей программы от внешних библиотек.Но есть проблемы: нативный API привязан к версии ОС, поэтому нет никаких гарантий, что нативный API будет таким же в следующих версиях ОС.

Вы можете попробовать каждую.Обратите внимание, что при каждом вызове этих функций рекомендуется указывать полный путь к исполняемому файлу.Также у вас должны быть права на чтение / выполнение (pdfprint.exe).Если у вас нет такого единственного способа запустить внешний инструмент, это запустить программу на C ++ с правами администратора.Вы можете запустить его таким образом, если щелкнуть правой кнопкой мыши по exe-файлу своей программы и выбрать элемент меню «Запуск от имени администратора».

0 голосов
/ 11 мая 2011

Как описано здесь , вы должны использовать что-то вроде этого:

LPTSTR szCmdline = _tcsdup(TEXT("C:\\Program Files\\....\\pdfprint.exe -args-you-need"));
CreateProcess(NULL, szCmdline, /* ... */);
...