티스토리 뷰

app.manifest 파일에서 requireAdministrator 권한을 주면 프로그램을 구동 시 관리자 권한으로 실행할지 묻는창이 뜬다.

하지만 만약 ClickOnce를 통해 배포하게 되면 해당 방법을 이용할 수 없다.

ClickOnce는 AppData에 설치되기 때문에 원천적으로 관리자 권한을 부여할 수 없기 때문이다.

(위 설정으로 ClickOnce 배포 시 에러 발생함)

 

그러면 이러한 상황에서 사용자가 프로그램을 관리자 권한으로 실행하게 하려면 어떻게 해야할까?

배포되는 프로그램을 일반 권한으로 실행하되, Program.cs에서 CMD를 이용해 관리자 권한으로 재실행 하면 된다.

구현 코드는 아래와 같다.

        private static bool IsAdministrator()
        {
            var wi = WindowsIdentity.GetCurrent();
            if (wi == null) return false;

            var wp = new WindowsPrincipal(wi);
            return wp.IsInRole(WindowsBuiltInRole.Administrator);
        }
        
        static void Main()
        {
            // 관리자권한으로 재실행
            if (!IsAdministrator())
            {
                try
                {
                    var pi = new ProcessStartInfo();
                    pi.UseShellExecute = true;
                    pi.FileName = Application.ExecutablePath;
                    pi.WorkingDirectory = Environment.CurrentDirectory;
                    pi.Verb = "runas";
                    Process.Start(pi);
                }
                catch (Exception ex)
                {
                    MessageBoxUtil.Error(ex.Message.ToString());
                }
                return;
            }
            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new FluentMainForm());
        }
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday