[C#] 작업 스케줄러 등록 C# 2015. 7. 28. 18:14

정말 오랜만에 포스팅을 한번 해 보는듯..

 

윈도우 관리자 권한 덕분에.. 뜨는 팝업창 -_-..

 

싫다.. 그래서 윈도우 시작하면 프로그램 실행 하면 자동으로 실행되게..

 

윈도우 사마께서 알아서 실행되게 해 주는...

 

근데 이게 또 안에 설정을 따라 바꿔야하니까 엄청 짜증난다.

 

근데 4.5에서 Task TaskScheduler 이분이 날 구원하셨으니..(4.0에서도 됩니다.)

 

코드 플렉스에 가보면 아래와 같은 파일이 존재한다.

 

처음에 COM+가 없어서 정말 고민하다가..

 

여기 저기 다 뒤져보니 떡하니 존재하는 아름다운 자식 ㅠㅠ

 

Microsoft.Win32.TaskScheduler.dll

 

뭐 무튼 이놈을 참조하고!!

 

using (TaskService taskService = new TaskService())
            {
                TaskDefinition taskDefinition = taskService.NewTask();

                //일반
                taskDefinition.Principal.DisplayName = "이름";
                taskDefinition.RegistrationInfo.Description = "설명";               
                LogonTrigger login = new LogonTrigger();
                taskDefinition.Principal.UserId = string.Concat(Environment.UserDomainName, "\\", Environment.UserName);
                taskDefinition.Principal.LogonType = TaskLogonType.InteractiveToken;
                taskDefinition.Principal.RunLevel = TaskRunLevel.Highest;
                taskDefinition.Triggers.Add(login);

                //조건
                taskDefinition.Settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew;
                taskDefinition.Settings.DisallowStartIfOnBatteries = false;
                taskDefinition.Settings.StopIfGoingOnBatteries = false;
                taskDefinition.Settings.AllowHardTerminate = false;
                taskDefinition.Settings.StartWhenAvailable = false;
                taskDefinition.Settings.RunOnlyIfNetworkAvailable = false;
                taskDefinition.Settings.IdleSettings.StopOnIdleEnd = false;  
                taskDefinition.Settings.IdleSettings.RestartOnIdle = false;
               
                //설정
                taskDefinition.Settings.AllowDemandStart = false;
                taskDefinition.Settings.Enabled = true;
                taskDefinition.Settings.Hidden = false;
                taskDefinition.Settings.RunOnlyIfIdle = false;
                taskDefinition.Settings.ExecutionTimeLimit = TimeSpan.Zero;
                taskDefinition.Settings.Priority = System.Diagnostics.ProcessPriorityClass.High;

                // 동작
                taskDefinition.Actions.Add(new ExecAction(@"실행파일경로"));

                // 등록
                taskService.RootFolder.RegisterTaskDefinition("스케줄러 표시명", taskDefinition);

            }

 

요런 코드를 넣어주면 들어간다.

 

만약 설정 내부 값이 잘못되면 등록에서 권한 문제 등을 일으키니까 정말 조심해야한다.

 

하나씩 코멘트를 달고 싶지만.. 각자가 알아서 하기!!

 

XML 추출은 작업 스케쥴러에서 내보내기 선택하면... 해당하는 내용을 볼 수가 있다.

 

그러면 각기 Setting에 대한 Element들을 통해서 원하는 방식으로 바꿔서 해 주면 된다.

 

4.5 관련해서 책을 잘 안봤더니...

 

하긴 책에도 이런건 없었던듯..

 

무튼 간만에 포스팅.. 삽질 끝!!