2008-09-25 3 views
14

모든 사용자에게 동일하지만 프로그램에 대해 쓰기 가능해야하는 프로그램 데이터 파일을 저장할 적절한 장소는 무엇입니까? MS Windows XP에서 동일한 위치는 무엇입니까? C : \ ProgramData는 일반 사용자가 설치 한 후에 쓸 수 없다는 것을 읽었습니다. 그게 사실이야? 플랫폼 SDK를 사용하여 프로그래밍 방식으로 해당 디렉토리를 검색하려면 어떻게합니까?Vista 및 ProgramData

답변

8

CSIDL_COMMON_APPDATA의 SHGetFolderPath(). 배치 파일의 경로를해야하는 경우

http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx

에서 더 읽기, 당신은 또한 %의 ALLUSERSPROFILE % 환경 변수를 사용할 수 있습니다.

+1

내가 그는 S –

+0

ERR로, 실제로 % ALLUSERSPROFILE %의 생각, 네, 맞습니다, 나는 –

1

당신은 사용할 수 있습니다

CString strPath; 
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE); 
1

Raymond Chen's article on this specific question를 참조하십시오.

요약하면 보안 구멍을 묻습니다.

+3

응용 프로그램은 관리자가 사용되지 않고 컴퓨터에 로그인 할 수 있습니다 모두가 신뢰 :-) S.을 놓친 우리가 다루고있는 회사에서 따라서 사용자간에 데이터를 공유하는 것이 보안 문제는 아닙니다. Vista에서는 사진과 동영상을 공용 폴더에서 공유 할 수 있습니다. Progams 도이 있어야합니다. – frast

7

여기에 다른 옵션의 좋은 요약이 있습니다 : http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

은 어디에서 프로그램 데이터 대신 프로그램 파일을 작성해야 하는가? .. "파일을 프로그램 파일을 작성하는 데 사용 내 응용 프로그램이 이미 에 어떤 다른 그것은 한 내 응용 프로그램의 이름으로 넣어 좋은 장소 같은 느낌 :

일반적인 응용 프로그램 코드 업데이트는 이있다 , 그리고 내 사용자가 관리자 였기 때문에 괜찮 았지만, 지금은 이라고 생각합니다. 은 내가 생각한 것처럼 물건을 집어 넣습니다. 심지어 UAC와도 관리자 은 (는) 표준 사용자와 유사한 권한으로 실행됩니다. 대부분의 경우. 그래서, 대신 내 파일을 넣어야합니까? "

4

사실 SHGetFolderPath은 더 이상 사용되지 않습니다.

SHGetKnownFolderPath을 대신 사용해야합니다.

+0

SHGetKnownFolderPath를 사용하면 소프트웨어가 Windows Vista에서만 실행됩니다. SHGetFolderPath는 Windows 2000 이후와 Vista에서도 작동합니다. – frast

+0

@frast, yes. 그러나 SHGetKnowFolderPath 가용성을 확인하고 종료 할 경우 사용할 수 있습니다. (LoadProc 또는 뭐든간에 ...) 그럼 당신의 응용 프로그램은 미래의 증거가 될 것이며 Windows 2000뿐만 아니라 SHGetFolderPath가 삭제 된 Windows 버전에서 작동합니다. –

+1

@Amigable 나는 이것을 할 것이지만, SHGetFolderPath를 지원하지 않는 Windows 버전입니다. – frast

관련 문제