C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[178] [MSDN]응용 프로그램에서 Windows Vista 사용자 계정 컨트롤 사용
이평섭 [wanglung] 18007 읽음    2008-10-21 12:44
Vista용으로 업데이트를 하면서 발견한 것입니다.
이 문서를 시작으로 하여 관련된 내용을 살펴보면 좀 이해가 쉬웠습니다.

응용 프로그램에서 Windows Vista 사용자 계정 컨트롤 사용
http://msdn.microsoft.com/ko-kr/magazine/cc163486.aspx

저의 경우에 해당하는 것을 조금 정리하였습니다.

- 사용자 데이터 저장 위치
XP이하에서는 Program Files 폴더에 사용자 데이터를 같이 저장하곤 했는데요.
Vista에서는 표준사용자일 경우 Program Files에 무엇인가 설치하려면, 권한 상승을 하여 설치를 하여야 합니다.
Vista 이전의 프로그램을 Vista에서 돌릴 경우, Program Files에 사용자 데이터를 저장하면,
Program Files에 저장되지 않고, Vista에서 가상화된 Program Files 폴더를 만들어서 저장합니다.
즉, C:\Program Files 가 아닌 다른 경로에 저장이 되기 때문에 EXE파일을 기준으로 경로를 찾다보면 사용자 데이터 파일를 못 찾게 되는 문제 등이 발생합니다.

관련된 글을 박영목님이 올리신 것이 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=139

MSDN의 이 문서를 읽어 보니,
응용 프로그램 별로 사용자별 데이터를 저장하는 경우라면,
파일이라면 %userprofile% 에 저장하고, 레지스트리 라면 HKEY_CURRENT_USER(HKCU) 에 저장하라고 합니다.

시스템 차원의 사용자 데이터를 저장할 경우라면,
%alluserprofile% 에 저장하라고 하네요.

또, 응용프로그램이 사용자설정값을 저장하는 경우라면,
%localappdata%를 사용하고 합니다.

- Internet Explorer Automation 처리
Vista에서는 Internet Explorer가 낮은 권한으로 실행됩니다. IE 프로세스를 응용프로그램에서 CoCreateInstance 실행할 경우도 낮은 권한으로 실행됩니다. 그러면 IE의 Protected Mode 가 On 상태로 됩니다.
낮은 권한으로 실행된 IE와  Automation 를 하는 방법은 응용프로그램도 낮은 권한으로 실행하는 것인데, 저의 경우, 훅처리를 해야 하는 터라 절대로 낮은 권한으로는 훅처리가 안되어서 관리자 권한으로 프로그램을 실행시키고, 여기서 IE를 실행시켜야 하는데, 권한 차이의 문제가 생깁니다. 이러면, IE와 응용프로그램간의 프로세스간의 통신을 UAC가 차단해 버립니다.

비스타에서 IE 프로세스 생성하는 방법을 살펴본 것입니다.
(http://download.microsoft.com/download/4/7/0/470da1ac-9a4a-4afb-a4ca-278d7ff621ea/Understanding_and_Working_in_Protected_Mode_Internet_Explorer.doc 를 참고)

1. CoCreateInstance
   CreateOLEObject('InternetExplorer.Application')
> IE7 Protected Mode On 으로 생성됨
응용 프로그램에서 CoCreateInstance를 사용하여 Internet Explorer를 시작하는 후 탐색 기능을 계속 제어해야 하면 IWebBrowser2를 사용하여 Internet Explorer를 프로그래밍 방식으로 탐색할 수 있습니다. 응용 프로그램의 무결성 수준이 IE 프로세스와 같을 경우 IE를 시작한 후에만 탐색 기능을 계속 제어할 수 있습니다. 응용 프로그램에서 무결성 수준이 다른 IE 프로세스의 URL을 탐색하면 추가 탐색을 수행할 수 없습니다. 탐색 후 IE 프레임이 나타나도록 해야 합니다.

2. IELaunchURL
> IE7 Protected Mode On 으로 생성됨
응용 프로그램에 올바른 값이 반환되고 해당 영역에 보호 모드가 설정되어 있는 URL의 경우 IE가 보호 모드로 시작됩니다.

3. IEIsProtectedModeURL
관리자 권한을 가진 무결성 수준이 높은 프로세스는 보호 모드가 해제된 무결성 수준이 높은 IE 프로세스를 시작합니다. 무결성 수준이 높은 프로세스에서 보호 모드를 시작할 경우 먼저 무결성 수준이 보통인 프로세스를 만드십시오. 이 프로세스는 무결성 수준이 높은 프로세스와 IE를 시작합니다.
> IE7 Protected Mode Off 으로 생성됨

저는 IEIsProtectedModeURL으로 IE를 실행하여 처리하였습니다.

- EXE파일에 manifest 넣기
비스타의 UAC는 EXE파일에만 적용된다고 합니다. Dll파일은 관련이 없다고 이 문서에서 언급하고 있는데요.
실행파일의 권한을 저는 관리자 권한으로 실행해야 해서 manifest 파일을 리소스로 만들어서 넣었습니다.
이렇게 하면, 비스타에서 EXE파일 아이콘에 방패모양의 작은 아이콘이 덮입혀져서, 사용자에게 이것은 권한상승이 되는 프로그램이다라는 것을 알려준다고 합니다.
manifest 포맷, EXE파일과 같이 컴파일하는 방법 등이 잘 나와있습니다.

- 설치 프로그램
저는 Inno Setup으로 설치프로그램을 만들어서 사용하는데, VIsta에서는 Install, setup 이 들어간 exe파일은 UAC 권한을 변경하는 창을 거쳐야 설치가 되던군요.
그런데, Windows Installer를 사용하면, 이를 우회하는 방법이 있다고 합니다.

좋은 하루 되시구요.

+ -

관련 글 리스트
178 [MSDN]응용 프로그램에서 Windows Vista 사용자 계정 컨트롤 사용 이평섭 18007 2008/10/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.