コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: TaskDefinition.cs プロジェクト: BclEx/AdamsyncEx
 public void Dispose()
 {
     _regInfo = null;
     _triggers = null;
     _settings = null;
     _principal = null;
     _actions = null;
     if (_v2Def != null)
         Marshal.ReleaseComObject(_v2Def);
     _v1Task = null;
 }
コード例 #3
0
        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);
                                            }
        }