▣ [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6)
==> 이 글을 작성할 때의 개발 환경은 Windows XP(SP2) + VB6 이었습니다.
그런데 이 방법대로 Vista + VB6 개발 환경에서 컴파일 하고 실행해보니 에러가 발생하더군요.

이렇게 컴파일된 실행 파일은 Vista 뿐만 아니라 XP에서 실행시켜도 에러가 발생합니다.
Vista + VB6 + RC.EXE + VB 리소스 편집기 ... 뭔가 문제가 있는 듯 한데 추가적인 테스트는 시간 관계상 다음으로 미룹니다. ^^
▣ 이 글에서는 Vista + VB6 개발 환경에서 위 에러를 피할 수 있는 두 가지 방법을 설명합니다.
[1] manifest 정보를 별도 파일로 관리.
manifest 정보는 실행 파일에 리소스로 포함시키지 않더라도 다음의 명명 규칙에 따라 실행 파일과 같은 폴더에 텍스트 파일로 넣어두기만해도 적용됩니다.
실행 파일(확장자 포함)명 + ".manifest"
예를들어 실행 파일명이 vb_amdin.exe인 경우 vb_admin.exe.manifest 이름으로 저장하면 됩니다.
요즘들어 Vista와 호환되는 유틸리티가 배포되고 있는데 일부 프로그램에서는 위 방법을 이용하고 있습니다. (Ex. Total Commander 7)
[2] VB2005의 mt.exe 사용
이전 글에서 mt.exe를 이용하는 방법에 대해서도 언급했었는데, 이 방법을 이용하는 경우에는 문제가 발생하지 않았습니다.
mt -manifest app_name.exe.manifest -outputresource:app_name.exe;#1
manifest 정보를 리소스로 포함시켜서 배포하겠다면 이 방법을 이용하면 됩니다.
▷ 개발 및 테스트하는 경우, 컴파일 할 때마다 매번 mt.exe를 실행하는 것은 귀찮은 작업이 될테니 컴파일하는 폴더에 manifest 파일을 저장해두면 좀 더 수월하게 진행할 수 있을겁니다.
(간단한 예제 소스와 함께 mt.exe 실행 파일이 있습니다.)
▣ 첨부파일 설명
▷ 압축을 풀면 루트에 프로젝트 소스와 함께 Manifest, mt 2개의 폴더가 있습니다.
▷ Manifest
- Vista에서 열어보면 방패 표시가 있는데, 이것은 같은 폴더에 있는 manifest 파일 때문입니다.
- manifest 파일을 삭제하고 실행하면 일반 사용자 권한으로 실행됨을 확인할 수 있습니다.
▷ mt
- Vista에서 열어보면 방패 표시가 있는데, 이것은 mt.exe를 이용해서 minifest 정보를 포함했기 때문입니다.
- manifest 파일을 삭제하고 실행하더라도 Admin 권한으로 실행됩니다.
☞ 본문 출처 : http://www.enjoydev.com/blog/118

☞ 본인의 글 입니다. 이 글을 다른 곳에 게재하는 경우 본문 출처를 밝혀주시기 바랍니다.
☞ 잘못된 내용이 있는 경우 지적 바랍니다.
트랙백 주소 :: http://optant.ismine.net/blog/trackback/118
-
Subject: [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6) - #2
Tracked from 경제적 자유와 은퇴를 향한 여정 2007/12/12 20:50 삭제▣ [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6)== 이 글을 작성할 때의 개발 환경은 Windows XP(SP2) + VB6 이었습니다.그런데 이 방법대로 Vista + VB6 개발 환경에서 컴파일 하고 실행해보니 에러가 발생하더군요. 이렇게 컴파일된 실행 파일은 Vista 뿐만 아니라 XP에서 실행시켜도 에러가 발생합니다.V
vb_vista_exe_admin2.zip
댓글을 달아 주세요
여기에 있는글 정말 잘 읽었습니다. 도움이 많이 되었구요.
방화벽에 예외 포트를추가 하려고 했습니다. 하지만 잘 처리 되지 않았습니다
환경은 다음과 같습니다.
Vista, VB6,
제공해주신 부분에 다음항목만 추가해서 TEST를 진행했습니다.
Private Sub Command2_Click()
Dim Returns As Long
Returns = ShellExecute(Me.hwnd, "open", "netsh", " firewall add portopening TCP 9100 RAW", 0&, 0)
If Returns > 32 Then
MsgBox "결과값: " & CStr(Returns) + vbCrLf + "방화벽에 RAW포트를 예외 항목에 등록했습니다.", vbOKOnly + vbInformation, "예외포트등록완료"
Else
MsgBox "결과값: " & CStr(Returns) + vbCrLf + "예외 포트 등록 에러 " + vbCrLf + "방화벽에 RAW포트를 예외 항목에 등록하지 못했습니다.", vbOKOnly + vbExclamation, "예외포트등록 에러"
End If
End Sub
하지만 여전히 처리가 안되네요.
왜 그런지 ?????
해결이 되었습니다.
vista 방화벽의 예외처리는 다음의 문서를 참조하시기 바랍니다.
http://support.microsoft.com/kb/947709
비베따위의 운영자 이동범님의 도움이 있었습니다.
많은 관심 가져 주심 다시한번 감사 드립니다.
질문이 있는데요..
윈7에서는 안되나요.. xp / v6 에서 리소스 적용하고 컴파일 하여
윈7에서 실행하면
응용 프로그램의 side-by-side 구성이 잘못되어 응용 프로그램을 시작하지 못했습니다. 자세한 내용은 응용 프로그램 이벤트 로그를 참조하거나 명령줄 sxstrace.exe 도구를 사용하십시오.
위와 같은 오류가 나오는데요..
VB6(SP6) 영문판 컴파일러로 어떤 프로그램을 만들었는데 기본적으로 레지스트리 HKLM 아래에 특정값을 쓰고 읽습니다. 당연히 관리자 권한이 필요한데, Windows 7 UAC가 기본설정 된 상태에서 Manifest 내용을 EXE에 집어넣고 실행하면 권한상승 창이 뜹니다.
제가 원하는 것은 권한상승창이 초기에 한 번만 뜨고 이후 실행할때는 안물어보게 할 수는 없나요? 이걸 가지고 몇개월째 골치를 앓고 있거든요. ㅠㅠ
UAC 기능은 Vista에서부터 추가된 기능으로 VB6과는 무관합니다.
Admin권한으로 실행해야하는 모든 프로그램은 "권한상승" 확인 과정을 거쳐야합니다. "권한상승" 확인 과정을 없애려면 제어판에서 UAC 기능을 끄는 방법 밖에 없습니다.