2016-11-28 3 views
0

나는 사용자가 제공 한 경로가 들어있는 기본 설정 파일을 읽는 간단한 프로그램을 가지고있다. 제공된 경로에있는 .bat 파일을 실행하기 위해 해당 경로를 사용하여 시스템을 호출하려고합니다. 저장된 경로를 시스템에 직접 전달할 수 있으며 .bat 벌금을 실행하려고 시도하지만 관리자로 실행해야합니다. How to call system() in an opened administrator program and gives it the same privileges?특정 위치에서 .bat를 실행하기 위해 system() (admin)을 호출하기위한 올바른 경로 구문은 무엇입니까?

위의 게시물에 표시된대로 문자열을 작성하지만이 새 문자열을 시스템에 전달할 때 "시스템이 지정된 파일을 찾을 수 없습니다"라는 메시지가 표시됩니다. 다음은 내가 시스템에 전달하는 문자열을 구축하는 방법입니다.

std::string adminFilePath = "runas /user:<admin-user> \""; 
adminFilePath.append(configFileSettings.path.c_str()); //Append the path of the file that we got from the config file. 
adminFilePath.append("\""); 
system(adminFilePath.c_str()); 

내 가정은 내가이 박쥐를 실행하는 바로 cmd를 창에 입력했던 것과 나타내는 기본 문자열을 구축을 위해 노력해야 해요,하지만 분명히 어디 선가 틀렸다 것입니다.

+0

에서 RUNAS을 실행하지 않도록 할 수 있습니까? 수동으로 실행하려고하면 어떻게됩니까? "C : \ WINDOWS \ batFile.bat"' 경로는 내가있어 인쇄와 동일하게 나타남 나는 인쇄 할 때 – NathanOliver

+0

는'내가 '에서 runas/사용자는 ...에 그것을 기대하고있어 것 같습니다 adminFilePath' 'configFileSettings.path.c_str()'에서 벗어납니다. 'system (configFileSettings.path.c_str());을 호출하면 .bat가 정상적으로 실행됩니다. "system (adminFilePath.c_str());'을 호출하려고하면"시스템은 지정된 파일을 찾을 수 없습니다 " – WannabeCoder

+0

하드 코딩 만하면'system (R) (runas/user : "C : \ Windows \ batFile.bat ")");'? 노트는 C++ 11 기능입니다. – NathanOliver

답변

0

단일 파일을 사용하지 마십시오. 파일 이름을 확인하십시오. 상대 경로가 상대 경로 인 경우 현재 실행중인 프로그램의 현재 폴더를 확인하십시오. 시스템을 사용하지 마십시오. 특히 폴더/파일 이름이 아닌 경우 특히 그렇습니다. system()은 posix 함수를 구현하려는 고대 시도이며 ANSI 만 지원하며 현대 인용 인수에서도 혼동을 일으킬 수 있습니다. execve 또는 스폰을 사용하십시오.

사실, 당신은 당신이 adminFilePath`이 유효 보여요`인쇄 할 경우 모든 Requesting administrator privileges at run time