C# Task Scheduler Managed Wrapper를 사용하여 Windows 시스템에서 예약 된 작업을 프로그래밍 방식으로 생성하려고합니다. 나는 작업을 생성 할 수 있지만, 계정에 로그온 할 때 난 단지 실행할 수 없습니다C에서 TaskScheduler를 사용하여 "로그인 한 경우에만 실행"및 "다음으로 실행"을 설정하는 방법은 무엇입니까?
내가 주위를 찾고있다 내가 작년에 질문을 받았다 다른 SO 질문을 찾았지만, 하나가 기타 관련 언급되지 않은 설정 또는 코드베이스에 뭔가 그 이후로 변경되었습니다
How to set "run only if logged in" and "run as" with TaskScheduler in C#?
나는이 방법은 아마 올바른 생각,하지만 난 그것을 시도 할 때 나는 혼란 오류 메시지 :
작업 스케줄러 2.0 (1.2)은이 속성 설정을 지원하지 않습니다. 현재 사용자 세션에서 작업을 실행하려면 InteractiveToken을 사용해야합니다.
public static void ScheduleTask(string machineName, string taskName, string taskAccount, string password) { using (TaskService ts = new TaskService(machineName)) { TaskDefinition td = ts.NewTask(); td.Principal.RunLevel = TaskRunLevel.Highest; td.Principal.UserId = WindowsIdentity.GetCurrent().Name; td.Principal.LogonType = TaskLogonType.InteractiveToken; td.Settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew; td.Settings.DisallowStartIfOnBatteries = false; td.Settings.StopIfGoingOnBatteries = false; td.Settings.StartWhenAvailable = true; //td.Settings.RunOnlyIfLoggedOn = true; td.Settings.Enabled = true; td.Settings.Hidden = false; td.Settings.AllowHardTerminate = true; td.Settings.ExecutionTimeLimit = new TimeSpan(); var tt = new SessionStateChangeTrigger(); tt.StartBoundary = DateTime.Now.AddMinutes(1); tt.UserId = taskAccount; tt.StateChange = TaskSessionStateChangeType.RemoteConnect; tt.Repetition.Interval = TimeSpan.FromMinutes(1); tt.Repetition.StopAtDurationEnd = false; td.Triggers.Add(tt); td.Actions.Add("notepad.exe", "c:\\test.log"); ts.RootFolder.RegisterTaskDefinition(taskName, td, TaskCreation.CreateOrUpdate, taskAccount, password, TaskLogonType.Password, null); } }
을 나는 유효한 서버, 사용자 등이 문제하여 w/o 작업을 생성하고이 코드를 실행하면 다음과 같이
는
내가 사용하고있는 코드입니다. 'RunOnlyIfLoggedOn'매개 변수에 주석을 달면 이전에 언급 한 오류가 발생합니다. LogonType 속성을 TaskLogonType.InteractiveToken으로 설정했기 때문에 내가 놓친 다른 것이 있어야합니다.
이레지스터 태스크 정의 호출이 TaskLogonType 대화 형 토큰을 설정해야합니다 :