C ++: Как заставить мою программу открывать .exe с необязательными аргументами - PullRequest
1 голос
/ 06 октября 2011

У меня проблемы с программой.Моя цель - открыть несколько файлов .exe с необязательными аргументами.Например, если я хотел открыть PDF-файл, я мог бы напечатать приведенную ниже строку в окне cmd.

// If used in a cmd window it will open up my PDF reader and load MyPDF.pdf file
"c:\Test space\SumatraPDF.exe" "c:\Test space\Sub\MyPDF.pdf"

Вот две попытки, которые я использовал.Первый открывает PDF, но, конечно, не загружает файл.Второй просто не работает.

// Opens the PDF in my program
system("\"C:\\Test space\\SumatraPDF.exe\"");

// Error I get inside of a cmd window is the comment below
// 'C:\Test' is not recognized as an internal or external command, operable program or batch file.
//system("\"C:\\Test space\\SumatraPDF.exe\" \"C:\\Test space\\Sub\\MyPDF.pdf\"");

Я не уверен в причине, почему второй не работает.Возможно, я что-то неправильно понимаю в системе или неправильно использую разделители.

Мне кажется, что для этого существует библиотека, а не длинная строка, которая использует так много разделителей.

Спасибо за любую помощь.

1 Ответ

1 голос
/ 06 октября 2011

Добро пожаловать в переполнение стека!

Системный метод работает, передавая свой аргумент в cmd / c.Таким образом, вам понадобится дополнительный набор цитат вокруг него.См. связанный вопрос , опубликованный sled.

В качестве альтернативы системе взгляните на ShellExecute или ShellExecuteEx Win32 API.Он имеет больше функций, хотя и не так портативен.

// ShellExecute needs COM to be initialized
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(sei);
sei.lpFile = prog;   // program like c:\Windows\System32\notepad.exe
sei.lpParameters = args;  // program arguments like c:\temp\foo.txt
sei.nShow = SW_NORMAL;  // app should be visible and not maximized or minimized

ShellExecuteEx(&sei);  // launch program

CoUninitialize();

Подробнее здесь .

...