2011-10-06 3 views
1

프로그램에 문제가 있습니다. 내 목표는 선택적 args 전달 된 여러 .exe 파일을 열 수 있습니다. 예를 들어 pdf를 열어보고 싶으면 아래의 문자열을 cmd 창에 입력 할 수 있습니다.C++ : 내 프로그램에서 선택적 args를 사용하여 .exe를 여는 방법

// 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\""); 

두 번째 이유는 확실하지 않습니다. 내가 시스템에 관한 어떤 것을 오해하고 있거나 구분 기호를 올바르게 사용하지 못하고있을 수 있습니다.

너무 많은 구분 기호를 사용하는 긴 문자열을 만드는 대신 라이브러리를 설계 한 것처럼 느껴집니다.

도움 주셔서 감사합니다.

+0

http://stackoverflow.com/questions/2642551/windows-c-system-call-with-spaces-in-command – sled

답변

1

스택 오버플로에 오신 것을 환영합니다!

시스템 방법은 cmd/c에 인수를 전달하여 작동합니다. 따라서 따옴표 따옴표가 필요합니다. 슬 레드가 게시 한 related question을 참조하십시오.

시스템의 대안으로, 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(); 

자세한 정보 here.

+0

cmd/c가 아니라 cmd/k입니다./k 옵션은 지정된 명령을 실행 한 후에 셸을 열어 둡니다. –

관련 문제