vista 이상은 UAC가 있어서 권한관리가 확실하게 되어 파일입출력이나 레지스트리 쓰기 등,
XP에서 그냥 되던게 안되는 경우가 있다. (개발자 입장에선 솔직히 존나 귀찮다)
어떻게 우회하는 방법보다는 그냥 관리자 권한 상승창을 띄워서 정면돌파하는 게 최선인 듯.
우회하는 방법은 그다지 보이질 않는다...

사용자가 실행파일을 실행시킬 때 '오른쪽 클릭 > 관리자 권한으로 실행'을 선택해서 실행해주면 되지만,
솔직히 만든 나도 까먹을 때가 종종 있으니 (-_-)
그냥 더블클릭해도 UAC 창이 뜨도록 리소스에 manifest를 포함시켜 컴파일하는게 제일 나은 듯 하다.

다음은 델파이에서 manifest를 리소스로 만들어 포함시켜 컴파일 하는 방법.
작업 디렉토리는 전부 C:\ 최상위라고 가정함.



1. myapp.manifest 파일을 만들어 내용은 아래의 XML을 넣고 저장.
노란색 부분은 기호에 맞게 수정할 것.
빨간색 부분이 포인트다. requireAdministrator 로 지정해서 관리자 권한을 요청한다.
프로젝트 기본 리소스에 manifest가 들어있는 경우가 있는데 (RT_MANIFEST) 저 값이 asInvoker라고 되어 있고,
이것은 '현재사용자 권한'이라는 뜻이다. (그러므로 권한상승창이 뜨질 않는다.)

<?xml version="1.0" encoding="utf-8" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity version="1.0.0.0"
      processorArchitecture="X86"
      name="어플이름"
      type="win32" />
    <description>elevate execution level</description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministrator" />
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>



2. myapp.rc 파일을 만들어 내용을 아래와 같이 해서 저장.

1 24 "myapp.manifest"



3. cmd 창을 열어 아래와 같이 입력하여 리소스 파일을 만든다. 성공하면 myapp.rec라는 파일이 만들어진다.

brcc32 C:\myapp.rc -fo C:\myapp.rec



4. 생성된 myapp.rec 파일을 컴파일하고자 하는 프로젝트의 리소스 폴더로 옮긴다. 그냥 속편하게 소스 폴더로 옮기고 컴파일. 그리고 프로젝트의 dpr 파일에 {$R *.rec} 문장을 추가해서 리소스를 포함시키자.


5. 만약 컴파일하는데 오류가 나면 해당 프로젝트의 리소스 파일에 이미 manifest 항목이 있는것이다. 프로젝트명이 myapp 이라면 myapp.res 파일을 에디터로 열어 RT_MANIFEST 항목을 삭제한 다음 다시 컴파일하자. (리소스 해커같은 걸로 열어보면 24 > 1 > 1024 처럼 되어 있음)



6. 실행파일을 vista나 win7에서 실행해서 권한상승창이 나오면 성공.




존나 귀찮다.




Posted by bloodguy
,