2008-10-06 2 views
0

SearchPath API가 기본 검색 경로 (첫 번째 매개 변수로 NULL 전달)를 사용할 때 c : \ windows에서 검색하지 못하게 할 수 있습니까? 발신자가 특정 경로로 보내도록 수정할 수 없습니다.SearchPath API가 c : windows에서 보이지 않게하는 방법은 무엇입니까?

c : \ windows에 응용 프로그램 ini 파일이있는 시스템이 있습니다. (사용하지 않으려하지만 레거시 이유로 남아 있어야합니다). c : \ users \ public에 동일한 ini 파일을 복사하고 시스템 경로 환경 변수 앞에 c : \ users \ public을 넣되 SearchPath을 호출해도 c : \ windows 버전이 계속 찾습니다. 해당 버전을 삭제하면 c : \ users \ public 버전이 검색되므로 경로가 올바르게 설정되었음을 알 수 있습니다.

답변

1

MSDN에 따르면 시스템 수준 (HKLM) 레지스트리 항목 ("나쁜 것")을 변경하는이 막대에 대해 수행 할 수있는 작업은 없습니다. 레지스트리가 변경되면 검색 순서가 현재 작업 디렉토리로 시작하게되며, 바로 가기에서 원하는 폴더로 설정할 수 있습니다. (다시 말하지만, 컴퓨터 레벨 레지스트리 항목을 변경하면 위험 할 수 있습니다.)

application shims을 들여다 보았습니까? 이것은 당신을 위해 일할 수있는 무언가 일 수 있습니다.

1

SetCurrentDirectory("c:\users\public")을 시도한 다음 SearchPath(...)을 시도하십시오.

+0

감사가, SearchPath의이 lib 디렉토리 내에서 호출, 그래서 정말 응용 프로그램을 현재 디렉토리로 장난하지 않아야합니다. 또한 여러 사용자가 서로 다른 경로를 사용하기를 원할 것입니다. 하드 코딩을 할 수 없습니다. 사용자가 설정할 수있는 var 환경을 사용할 것이고 SearchPath에 NULL을 전달하는 대신 그 경로를 사용할 것입니다. –

+0

네, 그게 최선의 해결책 인 것 같습니다. – akalenuk

1

나는 이것이 매우 늦다는 것을 알고 있지만,이 문제를 직접 경험 한 끝에 나는 더 나은 해결책을 제안 할 것이다.

발견 한대로 SearchPath의 첫 번째 인수를 사용하여 기본 순서 대신 검색 할 디렉토리를 지정할 수 있습니다. 당신은 검색하고 GetEnvironmentVariable로 현재 사용자의 PATH를 사용하고, 그 내에서 검색 할 수 있습니다

DWORD err = GetEnvironmentVariable("PATH", NULL, 0); 
char* path = new char[err+1]; path[err] = 0; 
GetEnvironmentVariable("PATH", path, err); 

err = SearchPath(path, "application", ".ini", 0, NULL, NULL); 
char* searchResult = new char[err+1]; searchResult[err] = 0; 
err = SearchPath(path, "application", ".ini", err, searchResult, NULL); 
관련 문제