Windows 7- 기계 사용자 독립 데이터를 어디서 어떻게 저장할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1806356

  •  05-07-2019
  •  | 
  •  

문제

Windows 7과 Vista에서 실행되도록 적응 해야하는 XP에서 실행되는 앱 (32 비트 C ++)이 있습니다. 사용자와 독립적으로 수십 바이트의 데이터를 저장해야합니다. XP에서는 hkey_local_machine 소프트웨어 아래 레지스트리에 데이터를 저장했습니다. Windows 7에서 앱을 실행하면 레지스트리 항목은 가상으로 표시되고 각 사용자는 별도의 데이터 사본을 얻습니다.

비 빈약 한 레지스트리는 데이터의 논리적 장소처럼 보이지만 어떻게 해야할지 모르겠습니다. 실제로 데이터를 저장하는 수많은 응용 프로그램이 있습니다. 그들은 어떻게 그렇게합니까?

나는 또한 다른 곳에 데이터를 저장할 의향이 있습니다. 글로벌 저장소가 잘 알려져 있습니까? 단일 작은 파일 만 있으면됩니다.

나는 전체 권리/특권 사업에 대해 다소 무지하여 힌트, 포인터 등이 대단히 감사합니다.

도움이 되었습니까?

해결책

Windows 7의 설계 목표 중 하나는 사용자 데이터 및 응용 프로그램을 분리하는 것입니다. 이는 개인 정보 보호, 보안 및 사용자 정의를 향상시키기위한 것입니다. 실제로 Win 7의 표준 사용자는 다른 사용자의 데이터를 변경할 수 없습니다.

응용 프로그램 데이터를 저장할 수있는 표준 장소는 System.environment.specialfolder 열거. 모든 폴더가 모든 사용자가 읽을 수 있거나 쓸 수있는 것은 아닙니다. 예를 들어, CommonApplicationData는 모든 사용자가 읽을 수 있지만 관리자와 같은 적절한 정책을 가진 사용자는 쓸 수 있습니다.

사용자간에 공유되는 데이터가 절대적으로 있어야하는 경우 관리자 또는 권한이있는 데이터는 공유 위치에 설치해야합니다. 사용자 가이 데이터를 업데이트 해야하는 경우 ApplicationData와 같이 쓸 수있는 위치로 복사하고 자신의 개인 사본을 업데이트해야합니다. 이 개인 사본은 다른 사용자가 변경할 수 없습니다. 응용 프로그램이 다른 것이 작동하지 않는 한 공유 위치에 데이터를 설치해서는 안됩니다.

실제로 Win7에서는 공유 위치가 아닌 로그온 사용자의 응용 프로그램 및 데이터 폴더에 모든 응용 프로그램 및 데이터를 설치해야합니다. 여러 사용자가 응용 프로그램을 설치하면 각 사용자가 자체 응용 프로그램 사본 및 데이터를 얻습니다. 이것은 거의 항상 당신이 원하는 것입니다. 여러 사용자가 응용 프로그램이나 게임을 실행하는 경우 한 사용자가 다른 사람을 변경하는 것을 원하지 않습니다. 여러 사용자가 실제로 동일한 변경이 필요한 경우 각 사용자가 필요할 때 개인 사본을 업데이트하도록하십시오. 한 사용자의 계정이 해킹되거나 악한 일이 있으면 다른 사람의 응용 프로그램과 데이터를 파괴하는 것을 원하지 않습니다.

또한 WIN7에서 사용자는 원격으로 기계에 로그온 할 수 있으므로 사용자 별 화면 해상도 또는 IP 주소와 같은 시스템 별 데이터를 저장하는 것이 좋지 않습니다. 대신 앱이 실행될 때마다 이것을 확인하십시오.

다른 팁

IMHO, 많은 사람들이 개별 사용자가 자신의 소프트웨어 패키지 사본을 설치하게한다고 생각하는 것은 불합리합니다. 실제로 많은 패키지는 관리자에 따라 완료되지 않으면 설치되지 않습니다 (Allusers = 1). 관리자보다 일부 보호 수준에서 시스템을 넓게 설치하는 합리적인 수단이 제공되지 않는 경우 관리자 레벨 설치가 표준으로 유지됩니다.

예를 들어, 중간 권한이없는 일부 비 Admin 사용자 (중간 권한 포함) 설치를 할 수없는 이유는 레지스트리 (HKLM Software Package) 및 모든 사용자 Application Data Package의 디렉토리에서 레지스트리 키를 만들 수 있습니까?

관리자를 요구하기로 결정했습니다 (Allusers = 1) .msi를 수정하여 수정 된 보호 기능을 갖춘 레지스트리 키를 작성했습니다.

따라서 내 고객이 전용 워크 스테이션을 보유한 상황에서 응용 프로그램 (R+W에 대한 좋은 오래된 INI 파일에서 데이터를 도출 함). 그들이 가진 모든 사용자에게 동일한 기계?

(Windows 7/Vista 아래) : Environment.getFolderPath (Environment.Specialfolder.commonApplicationData) + @" goscan goscan.ini"에 읽고 쓸 필요가 있습니다.

그러나 다른 사람과 마찬가지로 일반적인 사용자에 대한 권한이 R+W에 충분하지 않다는 것을 알게되었습니다. 설치 프로그램이 완료된 후 또는 설치 중에 디렉토리/파일 권한을 변경하는 것이 "허용 가능한"관행입니까 (vs 2008 설정 프로젝트에서이를 수행 할 곳은 확실하지 않음).

-폴

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