Language - C#/C#(UI - WINFORM)

C# - Windows 관리자 권한 Application Run

KimTory 2021. 11. 25. 22:19

▶ Goal

 

Windows 윤영체제 내에서 시스템의 중요한 정보 또는 속성을 변경 하기 위해 관리자 권한으로 실행해야 되는 경우가 있습니다. 이를 위해 C# Winform을 통해 관리자 권한을 Check 하고 아닐 시, 관리자 권한으로 실행 시켜주는 프로그램을 구현해 봤습니다.

 

▶ Theory

 

구현 방식은 Winform Load 시, 관리자 권한 여부를 Check 해주는 함수를 만들고 함수 내에서 현재 Windows 사용자를 나타내는 Windowsldentity 개체를 반환 후,  권한을 부여 받은 후 관리자 권한으로 실행하게끔 하겠습니다.

 

▶ 적용 예시

→ 상위로 부터 전달 받은 시간 Data를 기준으로 윈도우 시간 동기화 작업

→ 상위 PC에서 Vision 내부 PC에 접근하여 폴더명 및 Data 추가 및 삭제 작업

 


[ CODE ]

using System;
using System.Windows.Forms;
// 필수
using System.Security.Principal;
using System.Diagnostics;

namespace AdministratorTest
{
    static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            if (IsAdministrator() == false) // 관리자 권한으로 실행되지 않는 경우라면 ..
            {
                try
                {
                    ProcessStartInfo procInfo = new ProcessStartInfo();
                    procInfo.UseShellExecute = true;
                    procInfo.FileName = Application.ExecutablePath;
                    procInfo.WorkingDirectory = Environment.CurrentDirectory;
                    procInfo.Verb = "runas";
                    Process.Start(procInfo);
                }
                catch (Exception ex)
                {
                    // 사용자가 프로그램을 관리자 권한으로 실행하기를 원하지 않을 경우에 대한 처리
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
            else // 처음부터 관리자 권한으로 실행 시,,,
            { 
                Application.SetHighDpiMode(HighDpiMode.SystemAware);
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }

        }
        public static bool IsAdministrator()
        {
            WindowsIdentity identity = WindowsIdentity.GetCurrent();

            if (identity != null)
            {
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                return principal.IsInRole(WindowsBuiltInRole.Administrator);
            }
            return false;
        }
    }
}

'Language - C# > C#(UI - WINFORM)' 카테고리의 다른 글

C# - Bitmap Image 합성  (0) 2021.11.17