[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(새 창으로 열기)

☞ 본인의 글 입니다. 이 글을 다른 곳에 게재하는 경우 본문 출처를 밝혀주시기 바랍니다.

☞ 잘못된 내용이 있는 경우 지적 바랍니다.

2007/05/03 10:23 2007/05/03 10:23

트랙백 주소 :: http://optant.ismine.net/blog/trackback/118

  1. Subject: [Vista] Admin 권한으로 실행되는 프로그램 만들기 (VB6) - #2

    Tracked from 경제적 자유와 은퇴를 향한 여정 2007/12/12 20:50  삭제

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

댓글을 달아 주세요

  1. 정선봉 2008/02/29 16:25  댓글주소  수정/삭제  댓글쓰기

    여기에 있는글 정말 잘 읽었습니다. 도움이 많이 되었구요.

    방화벽에 예외 포트를추가 하려고 했습니다. 하지만 잘 처리 되지 않았습니다

    환경은 다음과 같습니다.
    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

    하지만 여전히 처리가 안되네요.

    왜 그런지 ?????

  2. 정선봉 2008/02/29 16:25  댓글주소  수정/삭제  댓글쓰기

    해결이 되었습니다.


    vista 방화벽의 예외처리는 다음의 문서를 참조하시기 바랍니다.

    http://support.microsoft.com/kb/947709
    비베따위의 운영자 이동범님의 도움이 있었습니다.

    많은 관심 가져 주심 다시한번 감사 드립니다.

  3. jaco 2010/07/16 08:57  댓글주소  수정/삭제  댓글쓰기

    질문이 있는데요..
    윈7에서는 안되나요.. xp / v6 에서 리소스 적용하고 컴파일 하여
    윈7에서 실행하면

    응용 프로그램의 side-by-side 구성이 잘못되어 응용 프로그램을 시작하지 못했습니다. 자세한 내용은 응용 프로그램 이벤트 로그를 참조하거나 명령줄 sxstrace.exe 도구를 사용하십시오.

    위와 같은 오류가 나오는데요..

  4. 아르미즈 2011/06/15 18:11  댓글주소  수정/삭제  댓글쓰기

    VB6(SP6) 영문판 컴파일러로 어떤 프로그램을 만들었는데 기본적으로 레지스트리 HKLM 아래에 특정값을 쓰고 읽습니다. 당연히 관리자 권한이 필요한데, Windows 7 UAC가 기본설정 된 상태에서 Manifest 내용을 EXE에 집어넣고 실행하면 권한상승 창이 뜹니다.

    제가 원하는 것은 권한상승창이 초기에 한 번만 뜨고 이후 실행할때는 안물어보게 할 수는 없나요? 이걸 가지고 몇개월째 골치를 앓고 있거든요. ㅠㅠ

    • 용재님 2011/06/16 11:12  댓글주소  수정/삭제

      UAC 기능은 Vista에서부터 추가된 기능으로 VB6과는 무관합니다.
      Admin권한으로 실행해야하는 모든 프로그램은 "권한상승" 확인 과정을 거쳐야합니다. "권한상승" 확인 과정을 없애려면 제어판에서 UAC 기능을 끄는 방법 밖에 없습니다.