F.R.I.D.A.Y.

관리자 권한의 프로그램 시작 프로그램 등록 본문

DEV/.Net

관리자 권한의 프로그램 시작 프로그램 등록

F.R.I.D.A.Y. 2022. 6. 2. 08:14
반응형

 레지스트리 시작 프로그램에 관리자 권한 프로그램 등록 시 발생하는 문제 해결하기


시작 프로그램

 Windows 시작 프로그램은 개발자 입장에서 상당히 매력적인 기능일 것이다. 내 프로그램이 OS 시작과 함께 돌아간다고? 사용하는 시간이 늘어나는 것이나 마찬가지니...

 

 가장 간단한 등록 방법은 Startup 폴더에 해당 프로그램을 넣어두는 것이다. 바로가기도 아마 실행이 될것인데, 개발할 때는 주로 Startup 폴더에 넣는 것보다 선호되는 방법이 있으니, 아무래도 레지스트리 등록일 것이다.

 .Net 차원에서도 Reg Key에 접근/수정하는 기능을 제공하니 편하기도 편하고..

 

 그러나, 이러한 편의를 받는 프로그램은 일반 프로그램에 한정한다. 필요 권한이 requiredAdministrator 미만(asInvoker)의 프로그램. 즉, 관리자 권한을 필요로 하지 않는 일반 프로그램에 한정된다는 말이다. 관리자 권한이 필요한 프로그램은 권한 제어로 인해 UAC를 낮춰주지 않는 이상 제대로 실행이 되지 않는다. 레지스트리의 시작 프로그램 등록을 해 놓더라도!

 

대안책

 그러나 관리자 권한 프로그램의 시작 프로그램 등록이 완전히 안 되는것은 아니다. 다행히 Windows Task Scheduler(작업 스케줄러)에 등록하는 것으로, 관리자 권한 프로그램의 시작 프로그램 등록이 가능하다.

 

        public static void SetStartup()
        {

            Process.Start("cmd",$"/c schtasks -create /sc onlogon /tn \"\\pctory\\autorun\" /tr \"{Application.ExecutablePath}\" /RL HIGHEST");

        }

        public static void ResetStartup()
        {
            Process.Start("cmd", $"/c schtasks -delete /tn \"\\pctory\\autorun\" /f");
            Process.Start("cmd", $"/c schtasks -delete /tn \"\\pctory\" /f");
        }

 위 두 메서드는 현재 진행중인 프로젝트에서 시작 프로그램 등록을 위한 스케줄러 등록을 하는 코드이다. 실제로는  cmd 명령 프롬프트로 작업을 하게 되는 것인데, 찾아보니 따로 .Net 상으로 지원하는 스케줄러 조작 기능이 없는 것으로 보인다. C++에서 할 수 있는 TaskScheduler 처리를 Wrapping 한 오픈소스가 있는 듯 싶은데, 진행중인 프로젝트에서는 외부 프로젝트를 끌어다 쓰면 승인을 받아야해서.. MetroForm 디자인도 안 가져다 쓰고 직접 코드 작성해서 프로젝트 안에 박아버렸다.

 

아무튼, 작업 스케줄러 등록에 대한 자세한 내용은 schtasks 명령에 대해 찾아보길..

728x90
반응형
Comments