이번에는 관리자 권한으로 프로그램을 실행하는 방법을 알아볼까 합니다.
일단 소스부터 보시죠.
Dim id As WindowsIdentity = WindowsIdentity.GetCurrent() Dim p As WindowsPrincipal = New WindowsPrincipal(id) Dim startInfo As ProcessStartInfo = New ProcessStartInfo() If p.IsInRole(WindowsBuiltInRole.Administrator) = False And Environment.OSVersion.Version.Major < 6 = False Then startInfo.UseShellExecute = True startInfo.WorkingDirectory = Environment.CurrentDirectory startInfo.FileName = Application.ExecutablePath startInfo.Verb = "runas" Try Process.Start(startInfo) Catch ex As Exception MessageBox.Show("관리자권한 요청을 하지 못했습니다.", "알림", MessageBoxButtons.OK, MessageBoxIcon.Error) Me.Close() Exit Sub End Try Me.Close() Exit Sub End If
최근에 업그레이드를 담당하는 프로그램을 개발하면서 문제가 발생을 하였습니다.
프로그램상에서 FTP를 통하여 받은 파일들이 있는데
프로그램에서 관리자 권한이 없다보니 System Dirve의 내용을 변경하지 못하고
그럼으로 파일을 내려받지 못한다라는 점입니다.
그래서 급하게 관리자 권한으로 실행시키기를 했는데, 위의 소스중에 눈여겨 볼만한곳은
If p.IsInRole(WindowsBuiltInRole.Administrator) = False And Environment.OSVersion.Version.Major < 6 = False then
이 되겠습니다. 위의 소스를 간단하게 설명하면 지금 실행시킨 프로그램이 관리자모드가 아니거나 OS 버전이 6보다 클때에 조건을 만족하는겁니다.
그런 일단 OS의 버전을 살펴보도록 하죠
보편적으로 Win 7 이상이 6을 넘어가는걸 확인 할 수 있습니다.
Winxp, win7, win8을 돌려가면서 테스틀 해본 결과
winxp의 경우 관리자 권한을 가지고 실행을 시키면 프로그램이 꼬이더군요..
7, 8 의 경우에는 권한이 없으면 프로그램에서 오류를 띄웁니다.
그래서 그 기준을 6으로 경계를 나누어 위의 조건식을 사용하는 겁니다.
나머지는 쭉 한번 훓어보시면 될것 같구요.
또한가지 보실 곳은..
Me.Close() Exit Sub
그냥 폼 끝내는거잖아? 할 수 있는데.. 제가 이자료를 찾을때는 exit Sub 만 달랑 있는데..
이상하게 제가 실행을 시킬때는.. 저 두개가 같이 있지 않으면 프로그램이 종료가 안되더군요...
이렇게 관리자 권한으로 실행시키는 방법을 알아보왔습니다^^