Here's what works for one user and many users (hopefully for the latter) :D
private static void CreateSheduledTask1(string targetPathDir)
{
try
{
// Get the service on the local machine
using (TaskService ts = new TaskService())
{
string folder = "Luna Sleep Tasks";
if (!ts.RootFolder.SubFolders.Exists("\\" + folder))
{
ts.RootFolder.CreateFolder(folder);
}
TaskFolder tf = ts.GetFolder(folder);
// Create a new task definition and assign properties
TaskDefinition td = ts.NewTask();
td.Settings.AllowDemandStart = true;
td.Settings.Compatibility = TaskCompatibility.V2;
td.Settings.Enabled = true;
td.Settings.RunOnlyIfIdle = false;
td.Settings.IdleSettings.StopOnIdleEnd = true;
td.Settings.IdleSettings.RestartOnIdle = false;
td.Settings.DisallowStartIfOnBatteries = false;
td.Settings.DisallowStartOnRemoteAppSession = false;
td.Settings.UseUnifiedSchedulingEngine = true;
td.Settings.WakeToRun = false;
td.Settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew;
td.Settings.RunOnlyIfNetworkAvailable = false;
td.Settings.ExecutionTimeLimit = new TimeSpan(72, 0, 0);
td.Settings.Priority = ProcessPriorityClass.Normal;
td.RegistrationInfo.Description = "Created by Luna Sleep Service installer.";
DailyTrigger dt = new DailyTrigger();
dt.Enabled = false;
dt.StartBoundary = System.DateTime.Now;
td.Triggers.Add(dt);
td.Principal.RunLevel = TaskRunLevel.Highest;
td.Actions.Add(new ExecAction(targetPathDir + "\\LunaSleep.exe", null, null));
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
MessageBox.Show("moc user:" + username);
tf.RegisterTaskDefinition("Luna Sleep Task", td,
TaskCreation.CreateOrUpdate,
username,
null,
TaskLogonType.InteractiveToken,
null);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private static void CreateSheduledTaskManyUsers(string targetPathDir)
{
try
{
// Get the service on the local machine
using (TaskService ts = new TaskService())
{
string folder = "Luna Sleep Tasks";
if (!ts.RootFolder.SubFolders.Exists("\\" + folder))
{
ts.RootFolder.CreateFolder(folder);
}
TaskFolder tf = ts.GetFolder(folder);
// Create a new task definition and assign properties
TaskDefinition td = ts.NewTask();
td.Settings.AllowDemandStart = true;
td.Settings.Compatibility = TaskCompatibility.V2;
td.Settings.Enabled = true;
td.Settings.RunOnlyIfIdle = false;
td.Settings.IdleSettings.StopOnIdleEnd = true;
td.Settings.IdleSettings.RestartOnIdle = false;
td.Settings.DisallowStartIfOnBatteries = false;
td.Settings.DisallowStartOnRemoteAppSession = false;
td.Settings.UseUnifiedSchedulingEngine = true;
td.Settings.WakeToRun = false;
td.Settings.MultipleInstances = TaskInstancesPolicy.IgnoreNew;
td.Settings.RunOnlyIfNetworkAvailable = false;
td.Settings.ExecutionTimeLimit = new TimeSpan(72, 0, 0);
td.Settings.Priority = ProcessPriorityClass.Normal;
td.RegistrationInfo.Description = "Created by Luna Sleep Service installer.";
DailyTrigger dt = new DailyTrigger();
dt.Enabled = false;
dt.StartBoundary = System.DateTime.Now;
td.Triggers.Add(dt);
td.Principal.RunLevel = TaskRunLevel.Highest;
td.Actions.Add(new ExecAction(targetPathDir + "\\LunaSleep.exe", null, null));
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
foreach(ManagementObject o in collection)
{
try
{
username = (string)o["UserName"];
MessageBox.Show("moc user:" + username);
tf.RegisterTaskDefinition("Luna Sleep Task", td,
TaskCreation.CreateOrUpdate,
username,
null,
TaskLogonType.InteractiveToken,
null);
}
catch
{
MessageBox.Show(username + " didn't work");
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
static string username;