public int Install() { int result = 0; Console.WriteLine("Start Install.."); this.withThrowExceptionIfPermissionDeneed(); if (isTargetTask()) { throw new InvalidOperationException("Task has already been setup. Please uninstall first."); } // TODO: Registry save (Only on first run) // create shortcut //string path = AppDomain.CurrentDomain.BaseDirectory; string exeFullPathFileName = Process.GetCurrentProcess().MainModule.FileName; //Console.WriteLine($"path : {path}"); //Console.WriteLine($"name : {exeFullPathFileName}"); // create shortcut ShortcutCreator shortcut = new ShortcutCreator(exeFullPathFileName, "-s", ShortcutCreator.TargetSpecialFolder.CommonPrograms); shortcut.AppUserModelID = Program.generateDefaultAppUserModelID(); shortcut.create(); // create task using (TaskService taskService = new TaskService()) { // regist task scheduler TimeSpan span = TimeSpan.FromHours(1); Task task = taskService.Execute(exeFullPathFileName).WithArguments("-s").AtLogon().RepeatingEvery(span).AsTask(D_PREVENT_REBOOT_TASK); TaskDefinition definition = task.Definition; TaskPrincipal principal = definition.Principal; principal.RunLevel = TaskRunLevel.Highest; principal.UserId = "SYSTEM"; TaskRegistrationInfo info = definition.RegistrationInfo; info.Author = "PreventReboot"; info.Description = "This program prevents reboot during login by updating the ActiveTime of Windows10 on a regular basis."; TaskSettings settings = definition.Settings; settings.DisallowStartIfOnBatteries = false; settings.StopIfGoingOnBatteries = false; settings.RunOnlyIfIdle = false; settings.Hidden = true; settings.Enabled = true; settings.StartWhenAvailable = true; IdleSettings idle = settings.IdleSettings; idle.RestartOnIdle = false; idle.StopOnIdleEnd = false; task.RegisterChanges(); } return(result); }
public void Dispose() { _regInfo = null; _triggers = null; _settings = null; _principal = null; _actions = null; if (_v2Def != null) Marshal.ReleaseComObject(_v2Def); _v1Task = null; }
public void ScheduleRenewTask() { string taskName = $"Lets encrypt renew {CleanFileName(_options.HostName)}"; Log.Information($"Creating Task {taskName} with Windows Task scheduler at 9am every day."); DateTime now = DateTime.UtcNow; DateTime runtime = new DateTime(now.Year, now.Month, now.Day, 9, 0, 0, DateTimeKind.Utc); string currentExec = Assembly.GetExecutingAssembly().Location; // Create an action that will launch the app with the renew parameters whenever the trigger fires string actionString = $"\"{string.Join("\" \"", Environment.GetCommandLineArgs().Skip(1))}\" --renew"; using (TaskService taskService = new TaskService()) using (DailyTrigger trigger = new DailyTrigger { DaysInterval = 1, StartBoundary = runtime }) using (ExecAction action = new ExecAction(currentExec, actionString, Path.GetDirectoryName(currentExec))) using (TaskFolder rootFolder = taskService.RootFolder) using (TaskDefinition task = taskService.NewTask()) using (TaskRegistrationInfo reginfo = task.RegistrationInfo) using (TriggerCollection triggers = task.Triggers) using (ActionCollection actions = task.Actions) using (TaskPrincipal principal = task.Principal) { rootFolder.DeleteTask(taskName, false); reginfo.Description = $"Check for renewal of ACME certificates for {_options.HostName}."; triggers.Add(trigger); actions.Add(action); principal.RunLevel = TaskRunLevel.Highest; // need admin principal.LogonType = TaskLogonType.ServiceAccount; principal.UserId = "SYSTEM"; rootFolder.RegisterTaskDefinition(taskName, task); } }