Skip to content

Instantly share code, notes, and snippets.

@Paskowsky
Created October 15, 2019 08:03
Show Gist options
  • Save Paskowsky/6f3c2d979494a1ead938d9c1c978b737 to your computer and use it in GitHub Desktop.
Save Paskowsky/6f3c2d979494a1ead938d9c1c978b737 to your computer and use it in GitHub Desktop.
public class TaskAutorun
{
public string TaskName { get; set; }
public string Description { get; set; }
public string Author { get; set; }
public string Version { get; set; }
public string Path { get; set; }
public TaskAutorun(string name)
{
TaskName = name;
Version = "1.0.0.0";
}
public bool TryRegisterTask()
{
try
{
RegisterTask();
return true;
}
catch
{
return false;
}
}
public void RegisterTask()
{
try
{
DoRegisterTask();
}
catch (TargetInvocationException ex)
{
throw ex.InnerException;
}
}
private void DoRegisterTask()
{
COMObject schedule = COMObject.Create("Schedule.Service");
schedule.InvokeMember("Connect", System.Reflection.BindingFlags.InvokeMethod, null, null, null, null);
COMObject taskDef = new COMObject(schedule.InvokeMember("NewTask", BindingFlags.InvokeMethod, 0));
COMObject regInfo = new COMObject(taskDef.InvokeMember("RegistrationInfo", BindingFlags.GetProperty));
regInfo.InvokeMember("Description", BindingFlags.SetProperty, this.Description);
regInfo.InvokeMember("Author", BindingFlags.SetProperty, this.Author);
regInfo.InvokeMember("Version", BindingFlags.SetProperty, this.Version);
COMObject triggerCollection = new COMObject(taskDef.InvokeMember("Triggers", BindingFlags.GetProperty));
COMObject trigger = new COMObject(triggerCollection.InvokeMember("Create", BindingFlags.InvokeMethod, 8/*TASK_TRIGGER_BOOT*/));
trigger.InvokeMember("Enabled", BindingFlags.SetProperty, true);
COMObject actionCollection = new COMObject(taskDef.InvokeMember("Actions", BindingFlags.GetProperty));
COMObject action = new COMObject(actionCollection.InvokeMember("Create", BindingFlags.InvokeMethod, 0/*TASK_ACTION_EXEC*/));
action.InvokeMember("Path", BindingFlags.SetProperty, this.Path);
COMObject rootFolder = new COMObject(schedule.InvokeMember("GetFolder", BindingFlags.InvokeMethod, "\\"));
COMObject registeredTask = new COMObject(rootFolder.InvokeMember("RegisterTaskDefinition", BindingFlags.InvokeMethod, this.TaskName, taskDef.Value, 0x6/*TASK_CREATE_OR_UPDATE*/, null, null, 3, ""));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment