2010-02-19 6 views
4

모든 시스템 구성 설정을 레지스트리에 저장하는 C++ MFC 앱이 있습니다. 이전에, 우리는 .INI 파일을 사용하고, 레지스트리 몇 년을 사용하는 동안 변경 다시 우리는 지금 다른 PC와 Windows 버전에서 마이그레이션하는 데 어려움이 사용자로부터 정기적으로 지원 요청을받을소프트웨어 구성 설정을 저장하기 위해 Windows 레지스트리에 어떤 대안이 있습니까?

SetRegistryKey("MyCompanyName"); 

를 사용하여, 나는 왔어요 레지스트리를 사용하면 문제가 해결되는 것보다 더 많은 문제가 발생한다는 결론에 도달했습니다. 특히 사용자별로 설정을 저장하려는 경우 .INI 파일로 돌아가고 싶지 않으므로 GetProfile ... 및 SetProfile ... 함수의 자체 버전을 작성하여 데이터 베이스. 아무도 이미 이것을 했습니까? 그리고 누구든지 너무 많은 코드 수정이 필요하지 않은 레지스트리 사용에 대한 대체 라이브러리의 기존 드롭을 알고 있습니까? 이상적으로는 기존 사용자를 지원하기 위해 레지스트리에서 초기 값을 읽을 수있는 옵션을 갖고 싶습니다.

+1

데이터베이스로 전환하여 지원 요청을 줄이려고합니까? 혹시 지원 해 봤어? –

+1

데이터베이스가 아닌 단순한 XML 파일이면 충분합니다. –

답변

3

나는 실행 파일과 같은 위치에있는 XML 파일로 넘어갈 것을 제안한다. 한 가지 이점은 XML이 Windows 이외의 컴퓨터에서 (심지어 Windows 버전간에) 이식 가능하다는 점입니다.

편집 : 실행 파일과 같은 위치에있는 XML 설정 파일의 뒤에 아이디어는 구성 파일 (전역 파일 시스템 디렉토리를 오염 할 수 없습니다) 프로그램 구성 (사용자가 아닌)과 캡슐화/데이터 숨기기위한 것입니다 . 사용자 구성 데이터는 사용자 또는 사용자가 선택한 디렉토리의 다른 파일에 있어야합니다.

+0

그 순간에 내가 생각하고있는 XML과 exe 폴더와 매우 비슷합니다. 구글이 관심을 많이 보이지는 않았지만 이미 그곳에 뭔가가 있다는 것이 놀랍다. –

+9

-1 응용 프로그램을 Program Files 디렉터리에 설치하지 않는 한 XML 파일 작성과 관련된 사용 권한 문제가 발생합니다. Windows 비 관리자 계정 및 UAC를 사용하여 설치하면 프로그램 파일에 블록 쓰기가 가능합니다. 구성 파일은 사용자의 응용 프로그램 데이터 디렉토리에 있어야합니다. –

+0

실행 파일과 동일한 위치에 있으면 단일 인스턴스에만 존재합니다. 물론 모든 사용자 설정을 단일 파일에 저장할 수 있습니다 (INI보다 XML에서 이것을 처리하는 것이 더 쉽습니다) ... 여전히 이상적인 IMHO는 아닙니다. –

3

각 사용자마다 별도의 INI 파일을 저장할 수 있습니다. WinAPI에서 직접 지원하는지 여부는 알 수 없지만. 적어도 많은 응용 프로그램이이를 수행합니다 (예 : TotalCommander).

업데이트 : 분명히 API가 지원합니다.

+7

사용자 별 설정 디렉토리를 사용하여이 작업을 수행 할 수 있습니다. XP에서와 마찬가지로 : C : \ Docs and Settings \ \ Application Data \ \ ... –

+0

특히 사용자의 AppData 폴더 경로를 가져 오는 API 호출이 있으므로 ... –

+0

예, 그 점을 염두에 두었습니다. –

0

Apple은 기본적으로 XML 인 plist 파일을 사용합니다.

1

사용자의 응용 프로그램 데이터 폴더 또는 아마도 내 문서 폴더에 저장된 XML/INI 구성 파일로 전환 할 수 있습니다. 이렇게하면 사용자가 파일을 복사하여 설정을 유지할 수 있습니다.

4

부스트는 설정을 계층 적 구조로 추상화하는 Boost.PropertyTree이라는 라이브러리가 있습니다. XML, JSON 및 INI와 같은 여러 형식으로 직렬화 할 수 있습니다.

이 파일들을 %APPDATA%에 저장하십시오. 그것들을 실행 파일과 같은 디렉토리에 저장하는 것은 좋은 생각이 아닙니다. 왜냐하면 %PROGRAMFILES%은 XP의 일반 사용자가 쓸 수 없기 때문입니다.

+0

Boost.PropertyTree가 UTF-8 XML 파일을 처리하지 않는 RapidXML을 사용한다는 점을 제외하고 이것은 나를위한 해결책이 될 것입니다. 대신에 pugixml을 사용하면 모든 것이 좋을 것입니다! –

1

마지막 데스크톱 응용 프로그램 프로젝트에서 레지스트리를 사용하지 않고 대신 사용자의 %APPDATA% 폴더에 저장된 INI 파일을 사용했습니다. 문자열과 정수 만 저장하는 경우 INI 파일이 작업을 수행하며 메모장에서 쉽게 편집 할 수 있습니다.

관련 문제