XP 이상 O/S는 사용자 계정 컨트롤(UAC) 라는게 기본설정으로 존제한다.
강화된 보안정책으로 어떠한 행동을 할때 권한을 얻고 해라 라는 형식이다.
일반적으로 어느정도 O/S를 다룰줄 아는 사람은 이부분을 권한 설정을 끈다.
하지만 그렇게 못하는 사람도 있기 때문에 프로그램을 만들때
관리자 권한을 획득한 상태로 프로그램을 실행 시켜야한다.
- ShellExecute 를 사용 하는 방법
if(IsUserAnAdmin() == FALSE) //프로그램이 관리자 권한인지 알 수 있는 함수
{
//관리자 권한으로 실행 시킨다.
SHELLEXEGUTEINFO si
ZeroMemory(&si, sizeof(SHELLEXECUTEINFO));
si.cbSize = sizeof(SHELLEXECUTEINFO);
si.hwnd = NULL;
si.fMask = SEE_MASK_FLAG_DDEWAIT | SEE_MASK_FLAG_NO_UI;
si.lpVerb = _T("runas");
si.lpFile = _T("프로그램명");
si.lpParameters = _T("파라미터");
si.nShow = SW_SHOWNORMAL;
si.lpDirectory = NULL;
ShellExecuteEx(&si);
}
- Visual C++ 2008 일 경우 설정
Project > Properties 메뉴를 선택
Linker > Manifest File 항목에서
Enable User Account Control (UAC)를 Yes로 설정하고
UAC Execution Level을 requireAdministrator로 설정한다.
- 매니페스트 파일 생성
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.00.0"
processorArchitecture="X86"
name="IsUserAdmin"
type="win32"/>
<description>Description of your application</description>
<!—어플리케이션 보안 요구 사항을 식별합니다. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
위의 내용으로 manifest 라는 XML 파일을 생성한다.
name="IsUserAdmin" 여기에 실행파일 명을 명시!!!
level="requireAdministrator" 인 경우 관리자 권한으로 프로그램 실행됨.
level="asInvoker" 인 경우 부모 프로세스와 동일한 토큰으로 실행됨(경험적 결과이나 일반사용자 권한으로 실행됨)
위의 파일을 응용프로그램 안으로 통합하는 방법은 여기 http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx 를 참고하십시오
'IT-개발,DB' 카테고리의 다른 글
[IT/일반] 윈도우즈7 네이트온 원격제어 문제해결 (0) | 2010.08.24 |
---|---|
[개발] 윈도우즈 비스타,7 UAC 관리자권한으로 외부 프로그램 실행 (0) | 2010.08.20 |
[개발/.NET Framework] 비주얼스튜디오 프로젝트에서 닷넷 프레임워크 3.5를 2.0으로 수정하려면 (0) | 2010.08.20 |
[ASP.NET] CultureInfo와 DateTimeFormatInfo로 국가별,형식별 날짜를 출력하자 (0) | 2010.08.20 |
[MS SQL SERVER 2005] MS-SQL-SERVER 2005와 외부 접속 (0) | 2010.08.20 |
댓글