2013-07-30 6 views
2

실행 파일이있는 동일한 폴더에 데이터 파일을 만드는 32 비트 Windows 이전 응용 프로그램 (C/Win32 원본 사용)이 있습니다.Windows UAC 가상화 파일의 위치를 ​​(프로그래밍 방식으로) 얻는 방법은 무엇입니까?

응용 프로그램에는 설치 프로그램이 없으므로 사용자가 원하는 위치에 실행 파일을 배치 할 수 있으므로 응용 프로그램에는 데이터가있는 위치를 사용자에게 알리는 대화 상자가 있습니다.

그러나 Microsoft Vista/7에서는 사용자가 프로그램 파일이나 다른 시스템 보호 폴더에 응용 프로그램을 넣으면 데이터 파일이 가상화되어 가상 저장소로 이동합니다.

비스타/세븐에서, 난 여전히 데이터 파일이있는 사용자 알려하려는 경우 : 만약 내가 (프로그래밍 방식) 알 수있는 방법

  1. 을 (매니페스트 파일에서 가상화를 방지하지 않고) 를 데이터 파일이 가상화되어 있습니까? 또는 실행 파일이있는 폴더가 데이터 파일을 가상화한다는 것을 의미합니까?

  2. 데이터 파일이 가상화되어 있다고 가정하면 가상 폴더의 위치를 ​​정보 대화 상자에 표시하려면 어떻게 프로그래밍 방식으로 알 수 있습니까?

내가 부탁 해요 내가이 매우 가까운 다음과 같은 질문을 발견하지만 가상화는 파일에 대한 일어나고 때 아는 솔루션 (있는 경우)를 표시하지 않습니다, 그것은 어디 가상화됩니다.

How to detect file redirection to the Windows VirtualStore?

답변

3

가상화는 응용 프로그램에 투명합니다. 가상화 중인지 여부를 확인하는 유일한 방법은 연결 한 질문의 답변 (TokenVirtualizationEnabled 플래그와 함께 GetTokenInformation() 사용)을 OS에 요청하는 것입니다. 그러나 OS에 질문하는 방법은 없습니다. 가상화 된 항목은 실제로 하나의 OS 버전마다 다를 수 있으므로 실제로 저장됩니다. 몇 가지 조사를 한 다음 런타임에 앱에서 감지 한 각 OS에 대한 경로를 하드 코딩해야합니다.

가상화를 감지하도록 코드를 업데이트하려는 경우 대신 UAC로 더 멋지게 코드를 업데이트하는 것이 좋습니다. 소속되지 않은 곳에 파일 저장을 중단하고 Microsoft에서 저장할 위치에 저장을 시작하십시오. 이 경우 사용자 프로필에서 대신 SHGetFolderPath() 또는 관련 기능을 사용하여 사용자의 CSIDL_LOCAL_APPDATA 폴더 (Vista +에서는 SHGetKnownFolderPath())를 찾고 해당 앱 아래에 데이터 파일을 저장할 하위 폴더를 만듭니다.

관련 문제