2009-08-31 4 views
7

"C : \ Program Files \ MyProgram"의 기본값 인 프로그램의 설치 디렉토리에 파일을 씁니다. UAC가 모든 수준에서 활성화되어 있으면 Windows Vista/7에서 제대로 작동하지 않습니다. UAC가 비활성화 된 경우 (또는 다른 Windows 버전의 경우) 정상적으로 작동합니다. UAC는 응용 프로그램이 기본적으로 Program Files 디렉터리에 대한 쓰기 권한을 거부한다는 사실을 알고 있습니다.Windows UAC 제한 사항을 해결하기위한 올바른 방법은 무엇입니까?

제 질문은 글쎄, 내 권리는 전혀 필요없이 사용할 수 있도록 내 신청서를 어떻게 작성해야합니까? 사용자가 권한 상승 또는 관리자 권한으로 실행하지 못하도록하고 싶습니다. 나는 단지 그것이 작동하기를 바란다. 어떤 응용 프로그램이 UAC에서 쓰기 권한을 가지고 특정 파일을 쓸 수있는 디렉토리가 있습니까? 그들은 주로 동적으로 생성/파괴/업데이트되는 설정 파일입니다.

도움 주셔서 감사합니다.

+3

응용 프로그램에서 UAC 제한 "제한 사항"이라고 부르지 않습니다. 엄밀히 말하자면 기술적으로는 그렇지만 어느 정도는 당신이 처음부터하지 말아야 할 일을하도록 안내합니다. –

+0

"절대해서는 안됩니다"- 왜 안 되니? – JimDaniel

+3

왜 지구상에서 Program Files에 구성 데이터를 쓰고 싶습니까? 이것이 설치 디렉토리입니다. 그것이 실행 파일과 라이브러리가있는 곳입니다. 데이터가 거기에 가지 않습니다 ... –

답변

12

사용자 별 응용 프로그램 별 데이터는 AppData 폴더에 기록해야합니다.

FOLDERID_LocalAppData와 함께 SHGetKnownFolderPath을 사용해야합니다.

관리 코드에서 System.Environment.GetFolderPath을 System.Environment.SpecialFolder.LocalApplicationData와 함께 사용해야합니다.

+2

.NET 구성 기능 (System.Configuration 네임 스페이스는 C# 프로젝트의 .settings 파일 임)을 사용하면 데이터가 적절한 위치에 배치되며 매우 우아한 방법으로 액세스하고 업데이트 할 수 있습니다 그것. –

4

예, 특정 위치가 있습니다. 첫 번째 참조로 this msdn article을 고려하십시오. 그것은 위치를 언급 :

네이티브 코드에서
  • CSIDL_APPDATA
  • CSIDL_LOCAL_APPDATA
  • CSIDL_COMMON_APPDATA

, 방법 SHGetKnownFolderPath가 유용합니다.

관리 코드에서 Environment.GetFolderPath()을 사용할 수 있습니다. 특정 응용 프로그램 프레임 워크 (예 : Windows 양식)에있는 경우 Application.LocalUserAppDataPath (개인적으로 가장 좋아하는 기술)과 같은 직접 속성을 통해 훨씬 쉽게 액세스 할 수 있습니다. 프레임 워크 경로에는 앱의 다른 버전 (예 : 다른 버전)을 구분하기 위해 반환하는 경로에 앱 별 한정자가 포함됩니다.