728x90
이번에 개발한 프로그램이 윈도우 시작시 실행이 되어야 하는데, 레지스트리에 등록을 해서 실행을 하니 관리자 권한이 필요한 프로그램이라 실행이되지 않았다.
그래서 작업 스케줄러에 등록하는 방법으로 하였다.
trigger를 BootTrigger로 줘야만 부팅 후 LockWorkStation 상태에서 프로그램이 켜질 줄 알았는데, LogonTrigger로 줘도 무방했다. BootTrigger를 주면 오히려 프로그램이 제대로 동작하지 않는 현상이 발생했다.
class WindowsAutoStarter
{
private const string kTASK_SCHEDULER_NAME = "My App";
public static void SetAutoStart(bool enable)
{
TaskService taskService = new TaskService();
TaskDefinition taskDefinition = taskService.NewTask();
if (enable)
{
// trrigger
taskDefinition.Triggers.Add(new LogonTrigger());
//taskDefinition.Triggers.Add(new BootTrigger());
// general
taskDefinition.Principal.DisplayName = "ProgramName";
taskDefinition.RegistrationInfo.Description = "blahblah";
taskDefinition.Principal.UserId = string.Concat(Environment.UserDomainName, "\\", Environment.UserName);
taskDefinition.Principal.LogonType = TaskLogonType.InteractiveToken;
taskDefinition.Principal.RunLevel = TaskRunLevel.Highest;
// condition
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;
// setting
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;
// operate
taskDefinition.Actions.Add(new ExecAction(Application.ExecutablePath));
// registration
taskService.RootFolder.RegisterTaskDefinition(kTASK_SCHEDULER_NAME, taskDefinition);
}
else
{
Microsoft.Win32.TaskScheduler.Task t = taskService.GetTask(kTASK_SCHEDULER_NAME);
if (t != null)
taskService.RootFolder.DeleteTask(kTASK_SCHEDULER_NAME, true);
}
}
}
728x90
'Basic Programming > C#' 카테고리의 다른 글
C# - Steam Game 실행하기 (0) | 2020.07.21 |
---|---|
C# - Dispose (0) | 2018.10.12 |
C# - WeakReference (0) | 2018.10.11 |
C# - 공부하기 좋은 사이트 (0) | 2018.09.05 |
C# - Attibute (0) | 2018.07.09 |