문제

우리가 필요한 안정적으로 얻을 수 있는 빠른 실행 모두에 대한 모든와 현재는 사용자 모두에서 Vista and XP.나 개발에서는 C++,하지만 이것은 아마 더 일반적으로 윈도우 API 질문입니다.

참고를 위해,여기에는 코드 응용 프로그램을 얻을 수 있는 데이터는 폴더 밑에 두 시스템:

    HRESULT hres; 
    CString basePath;
    hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
    basePath.ReleaseBuffer();

생각이 문제의 알고있는 하위 폴더 Microsoft 를 사용합니다.

윈도우 XP 에서,응용 프로그램 데이터 하위:

Microsoft\Internet Explorer\빠른 실행

타에서,그것은 나타나는 하위 폴더 변경되었습니다:

로밍\Microsoft\Internet Explorer\빠른 실행

그러나 나는 같은지 확인하는 것 이것은 올바른 방법을 결정이 올바른 위치에 있습니다.

찾기 을 결정하는 방법 이 위치는 매우 중요에 의존하는 하드 코딩된 폴더 이름이 거의 항상 나누기로 이동할 국제적인 설치,등등....는 사실 폴더의 이름이'로밍'비스타에 있는 경우 몇 가지 특별한 처리와 관련된 폴더(에 가까운 지역 설정 폴더에 XP).

편집:다음과 같은 msdn 문서 http://msdn.microsoft.com/en-us/library/bb762494.aspx 는 것을 나타냅 CSIDL_APPDATA 에는 해당 ID 를 FOLDERID_RoamingAppData 는 것을 지원 StocksR 의 주장하는 반환하지 CSIDL_APPDATA C:\Users\xxxx\AppData oaming 해야한다,그래서 가능한 사용에 대한 상대적인 경로를 CSIDL_APPDATA 도착하는 빠른 실행(\Microsoft\Internet Explorer\빠른 실행).

그래서 다음과 같은 알고리즘은 올바른 당 MS:

HRESULT hres; 
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
CString qlPath = basePath + "\\Microsoft\\Internet Explorer\\Quick Launch";

그것은 또한 좋은 아이디어를 확인 hres 도록 하는 전화 SHGetSpecialFolderPath 성공적이었다.

도움이 되었습니까?

해결책

AppData 에 vista 말 C:\Users\xxxx\AppData oaming 아 C:\Users\xxxx\AppData 폴더를 그 자체입니다.

또한 이 기사 http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx microsoft 사이트의 의미는 단순히 당신을 사용하여 상대적인 경로의 폴더 appdata

다른 팁

좋은 질문입니다!

당신이 무엇을 할 으로 제공하는 유혹을 으로 발굴하고 레지스트리 이 정보!

또한,우리는 유혹을 하드 코딩하는 몇몇 경로,심지어 부분적으로 있습니다.면 우리의 특별한 AppData 경로,단순히 추가 문자열 끝에,이것에서 휴식 아닌 우리를 설치합 소프트웨어의 폴더 이름은 지역화된 언어입니다.E.g. GetSpecialFolderPath(APP_DATA) + "\\Fonts" 에서 작동하지 않습니 non-English versions of Windows.

희망이 있는 사람은 적절한 당신의 질문에 대답;저는 호기심을 알고 그것은 자신!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top