제 목 : [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6)
작 성 일 : 2007년 03월 14일
작 성 자 : 제용재 (182cm@korea.com)
개발환경 : Visual Basic 6.0
분 류 : Development -> Visual Basic
키 워 드 : Visual Basic, Vista, UAC, rc.exe, mt.exe
요 약 : Admin 계정으로 로그인했더라도 프로그램을 실행시키면 일반 사용자 권한으로 프로그램이 실행된다.
Admin 권한으로 실행 시키기 위해서는 "관리자 권한으로 실행"을 이용하거나 권한 관련 속성 정보를 변경해야만 한다.
작 성 일 : 2007년 03월 14일
작 성 자 : 제용재 (182cm@korea.com)
개발환경 : Visual Basic 6.0
분 류 : Development -> Visual Basic
키 워 드 : Visual Basic, Vista, UAC, rc.exe, mt.exe
요 약 : Admin 계정으로 로그인했더라도 프로그램을 실행시키면 일반 사용자 권한으로 프로그램이 실행된다.
Admin 권한으로 실행 시키기 위해서는 "관리자 권한으로 실행"을 이용하거나 권한 관련 속성 정보를 변경해야만 한다.
Vista에서는 UAC(User Account Control, 사용자 계정 관리) 기능을 통해 프로그램 실행에 대한 권한을 강화했는데, 일반 사용자 권한으로 실행되는 프로그램에서는 시스템 폴더, Program Files 폴더, 레지스트리 제어 등에 있어 많은 제약이 따르게된다.
UAC 기능을 고려하지 않은 프로그램을 Admin 권한으로 실행하는 방법은 다음과 같다.
1. Vista 제어판을 통해 UAC 기능을 중지 시킨다. (비추)
- UAC 기능이 불편함을 초래할 수는 있으나, 사용자 모르게 임의로 실행되는 악성
프로그램 등으로부터 보호하는 기능을 가지고 있으므로 가급적 사용을 권장한다.
2. 실행 파일에서 오른쪽 버튼 클릭 후 "관리자 권한으로 실행" 메뉴 선택
- 경우에 따라 Admin 권한을 부여하기 위한 일회성 방법이다.
- "사용자 계정 컨트롤"의 권한 상승 화면을 거쳐야 한다.
3. 실행 파일의 속성->호환성 탭에서 "관리자 권한으로 이 프로그램 실행" 체크
- 속성 변경 후에는 자동으로 Admin 권한으로 실행된다.
- "사용자 계정 컨트롤"의 권한 상승 화면을 거쳐야 한다.
- 파일명을 변경하거나 위치(폴더)를 이동하는 경우, "권한 수준" 내용을 초기화 된다.
Vista에서 Admin 권한으로 실행되는 프로그램을 만들기 위해서는 manifest 파일을 리소스에 포함시키면 되는데 VB6의 리소스 편집기에서는 manifest 리소스 관리를 지원하지 않으므로 [1]VS6의 rc.exe 프로그램을 이용해서 리소스 파일을 만들고 이 리소스 파일을 포함해서 컴파일한다. 또는 [2]VS2005의 mt.exe를 이용해서 이미 컴파일 된 프로그램에 manifest 정보를 추가한다.
[1] manifest 리소스 정보를 포함해서 컴파일하는 방법
1) manifest 파일 만들기
- 다음의 내용을 텍스트 파일로 저장한다. (파일명 : "app_name.exe.manifest")
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="AdminApp"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="AdminApp"
type="win32"/>
<description>Description of your application</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
2) ResourceScript 파일 만들기
- 다음의 내용을 텍스트 파일로 저장한다. (파일명 : ResourceScript.rc)
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define RT_MANIFEST 24
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app_name.exe.manifest"
#define RT_MANIFEST 24
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app_name.exe.manifest"
3) rc.exe 를 이용한 리소스 파일 만들기
- 도스창에서 다음의 명령을 입력해서 리소스 파일을 만든다.
- "c:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\" 폴더에 있다.
"RC.EXE" /r /fo app_name.res ResourceScript.rc
4) VB 프로젝트에 리소스 파일 추가
- VB에서 프로젝트->파일 추가 메뉴를 통해 3)에서 만든 리소스 파일(app_name.res)을 프로젝트 리소스 파일로 등록한다.
5) 프로젝트 컴파일
6) Vista의 UAC 사용 환경에서 테스트
[2] VS 2005의 mt.exe를 이용하는 방법
1) Admin 권한 부여를 위한 프로그램(EXE) 준비
2) manifest 파일 만들기 ([1]과 동일)
3) 실행 파일에 manifest 정보 추가하기
mt -manifest app_name.exe.manifest -outputresource:app_name.exe;#1
4) Vista의 UAC 사용 환경에서 테스트
※ manifest 적용 후에는 다음 그림처럼 방패 모양이 추가되는 것을 볼 수 있다. (Vista에서 확인 가능)
※ manifest 적용 및 테스트를 위한 예제 프로젝트
☞ 본문 출처 : http://www.enjoydev.com/blog/107
☞ 본인의 글 입니다. 이 글을 다른 곳에 게재하는 경우 본문 출처를 밝혀주시기 바랍니다.
☞ 위 내용은 정식 문서 번역이 아닌, 실무 적용에 따른 경험을 바탕으로 어느정도 자의적인 설명이 포함되어있습니다.
잘못된 내용이 있는 경우 지적 바랍니다.
트랙백 주소 :: http://optant.ismine.net/blog/trackback/107
-
Subject: [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6)
Tracked from 경제적 자유와 은퇴를 향한 여정 2007/12/12 20:45 삭제제 목 : [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6)작 성 일 : 2007년 03월 14일작 성 자 : 제용재 (182cm@korea.com)개발환경 : Visual Basic 6.0분 류 : Development - Visual Basic키 워 드 : Visual Basic, Vista, UAC, rc.exe, mt.exe요
vb_vista_exe_admin.zip
댓글을 달아 주세요
ㅠOㅠ 엉어어엉... 감사합니다.
이거 정말 저에게는 10일 굶다가 물마시는 기분입니다.
비스타설치를 아직 안해서 프로그램 테스트는 해야겠고, 죽는줄 알았는데 정말 감사합니다.
이 내용을 주소와함께 제가 주로 사용하는 http://www.howtobank.net 에 옮겨도 되겠는지요?
비베활동이 왕성한 좋은 싸이트입니다.
허락하신다면 이 내용과 싸이트주소를 하우투뱅크 비베 게시판에 옮기고 싶습니다.
도움되는 내용이라니 저도 기분 좋네요.
공유 목적으로 올린 글이니 퍼가셔도 됩니다.
감사합니다.^^;
그런데 이방법으로 액티브엑스도(웹에서) 사용가능한지요?
위 방법은 실행파일(EXE)에만 해당됩니다.
ActiveX에서 Admin 권한을 갖기 위해서는 다른 방법으로 처리해야합니다.
VC++ 관련 예제는 많은데, VB에 대한 예제는 찾기가 쉽지 않네요.
"app_name.exe.manifest"에서 "app_name"을 해당 실행 파일명으로 바꿔주면 되지만, 별로 상관은 없는듯합니다.
그리고, 위에서 app_name.exe.manifest 와 같이 app_name이 몇개 나오는데 이것은 해당 컴파일 시킬 본인의 exe파일명이지요?
^^; 혹시나 싶어서요. 하두 개~고생을 많이 했더만 별별개 다 걸려여.
암튼 좋은 봄날 되세요.~~
좋은 정보에 우선 감사드립니다.
그런데 RC.EXE 파일을 찾을 수 가 없네요.
비쥬얼 베이직만 설치해서 없는건지...
따로 구할 수 있다면 어디서 구할수 있는지 알려주세요
Visual C++ 설치 과정에 포함된 툴로 알고 있습니다.
예제로 만든 프로젝트 압축 파일에 포함해뒀으니 압축 풀어서 사용하세요.
저는 위와 같은 방법으로 manifest는 추가하여 비스타에서 권한상승 됬음을 확인했습니다.
그런데 그 다음에 인스톨쉴드로 설치프로그램을 제작하여 비스타에서 설치 테스트를 해보았는데
아무리 해도 설치한 다음에는 방패표시도 안붙고 권한상승도 되지 않는군요
인스톨쉴드 11.5를 사용했는데 혹시 어떡게 해야 하는지 알려주셨으면 정말 고맙겠습니다
인스톨 쉴드는 사용해보질 않아서 테스트를 못해봤습니다.
manifest 파일을 같이 배포하거나 mt.exe를 이용해서 리소스에 추가 후 테스트 해보세요^^
참고.. http://www.enjoydev.com/blog/118
너무 반가운 정보를 접할수 있어 너무도 감사합니다.
제경우에는 해당 내용을 본후 vista 설치후 vb 6.0 설치 했습니다.
Test 중인 프로그램을 가지고 Test 해본 결과 실패 햇습니다.
수십번 Test 해도 안되어서...
님이주신 Sample로 다시 컴파일후 실행 해보니..
역시 안돼더군요..
둘다 에러 메세지가 아래와 같습니다.
"응용 프로그램의 side-by-side 구성이 잘못되어 응용 프로그램을 시작하지 못햇습니다.
자세한 내용은 응용프로그램 이밴트 로그를 참조하십시오."
혹 상기한 Messge에 대한 정보가 필요합니다.
1. Vista OS 설치가 잘못된 것인지 ??
2. VB 6.0 설치가 잘못된 것인지 ??
3. 아님 제가 님이 알려주신대로 제대로 못한 것인지 ??
님의 도움말을 목빠지게 기다리며
계속 Test 해 보겠습니다.
감사합니다.
ps
1 .res file을 제거후 컴파일 하면에러가 나지 않습니다
2. 디버그 모드에서는 에러가 나지 않습니다.
3. 응용프로그램 이벤트 뷰어
"H:\자료백업\Jws-Tools\Vb-Ocx\비스타\vb_vista_exe_admin\vb_vista_exe_admin.exe"에 대한 활성화 컨텍스트를 생성하지 못했습니다. manifest 또는 정책 파일 "H:\자료백업\Jws-Tools\Vb-Ocx\비스타\vb_vista_exe_admin\vb_vista_exe_admin.exe"의 17줄에서 오류가 발생했습니다. 잘못된 Xml 구문입니다.
Vista + VB6 개발환경에서 이 방법대로 컴파일하는 경우 에러가 발생하더군요.
테스트 및 새롭게 작성한 글이 있으니 확인해보세요^^
참고.. http://www.enjoydev.com/blog/118
중요한 정보 너무도 감사합니다
한가지 궁금한 게 있어서...
ResourceScript 파일 만들기에서
기존에 app_name_prg.rec 사용하고 있는데....
"app_name.exe.manifest" 과 같이 사용할수 있는 스크립트는 어떻게 만드나요.....
방법이 있겠죠????..
안녕하세요? 질문이 있어서 글을 남깁니다.
인스톨팩토리를 이용해서 패킹한 프로그램을 비스타에 설치도중에 STDOLE2.TLB 파일이 등록이 되지 않는다는 메세지가 나타납니다.
프로그램도 정상적으로 실행되지 않구요..
방법이 없을까요? ocx를 regsvr32 를 이용해서 수동으로 등록하는 방법처럼 TLB 파일도 수동으로 등록하는 방법이 없을까요?
그럼 수고하세요~
regtlib.exe 를 이용해서 등록하면 됩니다.
http://digital.ni.com/public.nsf/websea ··· document
답변 감사드립니다 .^^
근데.. 저의 vista home basic에는 regtlib.exe가 없군요..
용재님 께서는 인스톨러를 어떤것을 사용하십니까? 인스톨쉴드나 NSIS를 사용하면 비스타에 설치시에 아무 문제도 나타나지 않을까요?
한가지 질문을 드리고자 합니다.
VC++로 개발하고 있습니다. 그런데. 위에 님꼐서 설명 해주신대로 했습니다.
개발 환경은 VS2005고요...
방패 모양은 생깁니다. 기쁜마음에 실행 권한 요구 창 뜹니다. 허용을 눌렀습니다.
그런데.. DLL파일이 없어서 실행을 하지 못한다고 하네요.. 어떤점이 문제인가요?
완전 최고입니다.
너무 캄사합니다.
질문이 있는데요..
윈7에서는 안되나요.. xp / v6 에서 리소스 적용하고 컴파일 하여
윈7에서 실행하면
응용 프로그램의 side-by-side 구성이 잘못되어 응용 프로그램을 시작하지 못했습니다. 자세한 내용은 응용 프로그램 이벤트 로그를 참조하거나 명령줄 sxstrace.exe 도구를 사용하십시오.
위와 같은 오류가 나오는데요..
제가 아직 윈7을 사용해보지 못해서.....