2016-06-02 2 views
0

환경 변수를 통해 액세스되는 파일의 위치를 ​​얻으려면 어떻게해야합니까? windows 명령 프롬프트에서 where 명령과 같아야합니다. 현재 _popen("where python","r");을 사용하고 있지만 잠깐 동안 도스 창이 열립니다. 도스 창을 사용하지 않고 _popen을 조사한 결과 CreateProcess은이 간단한 것에 너무 과장된 것으로 보입니다.환경 변수를 통해 액세스되는 파일의 위치를 ​​얻으십시오.

+0

정말 위치가 필요합니까? 'where'가 반환하는 경로는 어쨌든 사용되는 경로입니다 (즉,'_popen ("python")'). – Cameron

+0

저는 파이썬을 돌리려고하지 않고 있습니다. 저는 그것이 어디에 있는지를 찾으려고 노력하고 있습니다. 그리고 이것은 갈 길과 같았습니다. 나는 PATH에서 파이썬의 위치를 ​​찾았지만 파이썬/스크립트가 있기 때문에 혼란 스럽다. – Auh

답변

4

SearchPath은 파일에 확장자를 넣을만큼 적합합니다.

파일 이름에 확장자를 두는 것은 너무 많은 경우
WCHAR buffer[MAX_PATH]; 
DWORD result = SearchPath(NULL, L"python.exe", NULL, MAX_PATH, buffer, NULL); 
if (result > 0) 
{ 
    std::wcout << buffer << std::endl; 
} 

, 당신은 PATHEXT 환경 변수의 값을 모두 반복하고 각 하나를 시도 할 수 : 마찬가지로.

+0

오, 그게 내 제안보다 낫다. – Wheezil

-1

실행 파일에 LoadLibrary()를 사용하고 GetModuleFileName()을 사용하여 위치를 요청할 수 있습니다. 그러나 이것은 EXE가 모듈로 실제로로드되기 때문에 부작용이 있습니다.

그 외의 경우 search order of CreateProcess을 사용하여 직접 파일을 찾을 수 있습니다.

죄송합니다.이 옵션 중 하나라도 좋다고 생각하지 않지만, 다른 것을 찾을 수 없습니다.

관련 문제