Skip to content

Instantly share code, notes, and snippets.

@auycro
Created June 26, 2014 01:30
Show Gist options
  • Save auycro/9fe02bea5dd764fc4ddd to your computer and use it in GitHub Desktop.
Save auycro/9fe02bea5dd764fc4ddd to your computer and use it in GitHub Desktop.
C#によるタスクスケジューラへの登録 http://tzedeck.seesaa.net/article/388838290.html
public void RegisterTaskDefinition()
{
ITaskService taskservice = null;
try
{
taskservice = new TaskScheduler.TaskScheduler();
taskservice.Connect(null, null, null, null);
ITaskFolder rootfolder = null;
try
{
//追加フォルダを指定する
rootfolder = taskservice.GetFolder("\\");
String path = "\\Test\\testTask";
//新規登録用のタスク定義
ITaskDefinition taskDefinition = taskservice.NewTask(0);
//----------------
//RegistrationInfoプロパティ
//----------------
//IRegistrationInfo registrationInfo = taskDefinition.RegistrationInfo;
//----------------
//Actionsプロパティ
//----------------
//IActionCollection actionCollection = taskDefinition.Actions;
//IExecAction execAction = (IExecAction)actionCollection.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
//IEmailAction emailAction = (IEmailAction)actionCollection.Create(_TASK_ACTION_TYPE.TASK_ACTION_SEND_EMAIL);
//IShowMessageAction showMessageAction = (IShowMessageAction)actionCollection.Create(_TASK_ACTION_TYPE.TASK_ACTION_SHOW_MESSAGE);
//----------------
//Triggersプロパティ
//----------------
//ITriggerCollection triggerCollection = taskDefinition.Triggers;
//IEventTrigger eventTrigger = (IEventTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_EVENT);
//ITimeTrigger timeTrigger = (ITimeTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
//IDailyTrigger dailyTrigger = (IDailyTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
//IWeeklyTrigger weeklyTrigger = (IWeeklyTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_WEEKLY);
//IMonthlyTrigger monthlyTrigger = (IMonthlyTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_MONTHLY);
//IMonthlyDOWTrigger monthlyDOWTrigger = (IMonthlyDOWTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_MONTHLYDOW);
//IIdleTrigger idleTrigger = (IIdleTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_IDLE);
//IRegistrationTrigger registrationTrigger = (IRegistrationTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_REGISTRATION);
//IBootTrigger bootTrigger = (IBootTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_BOOT);
//ILogonTrigger logonTrigger = (ILogonTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_LOGON);
//ISessionStateChangeTrigger sessionStateChangeTrigger = (ISessionStateChangeTrigger)triggerCollection.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_SESSION_STATE_CHANGE);
//----------------
//Settingsプロパティ
//----------------
//ITaskSettings taskSettings = taskDefinition.Settings;
//IIdleSettings idleSettings = taskSettings.IdleSettings;
//INetworkSettings networkSettings = taskDefinition.Settings.NetworkSettings;
//******************************************:
//全般タブ
//******************************************:
//作成者
//registrationInfo.Author = "作成者";
//説明
//registrationInfo.Description = "説明";
//IPrincipal principal = taskDefinition.Principal;
//タスクの実行時に使うユーザアカウント
//principal.UserId = "**********";
//ユーザがログオンしているときのみ実行する
//principal.LogonType = _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN;
//ユーザがログオンしているかどうかにかかわらず実行する(パスワードを保存しない(チェックなし))
//principal.LogonType = _TASK_LOGON_TYPE.TASK_LOGON_PASSWORD;
//ユーザがログオンしているかどうかにかかわらず実行する(パスワードを保存しない(チェックあり))
//principal.LogonType = _TASK_LOGON_TYPE.TASK_LOGON_S4U;
//最上位特権で実行する(チェックなし)
//principal.RunLevel = _TASK_RUNLEVEL.TASK_RUNLEVEL_LUA;
//最上位特権で実行する(チェックあり)
//principal.RunLevel = _TASK_RUNLEVEL.TASK_RUNLEVEL_HIGHEST;
//表示しない
//taskSettings.Hidden = false;
//******************************************:
//トリガタブ
//******************************************:
//---------------------
//イベントログで定義されたイベント
//---------------------
//eventTrigger.Subscription
//eventTrigger.ValueQueries
//---------------------
//スケジュールに従う(1回)
//---------------------
//開始
//timeTrigger.StartBoundary = "2014-01-24T22:37:37";
//遅延時間を指定する
//timeTrigger.RandomDelay = "PT8H";
//繰り返し間隔
//timeTrigger.Repetition.Interval = "PT3H";
//継続時間
//timeTrigger.Repetition.Duration = "P2D";
//繰り返し継続時間の最後に実行中のすべてのタスクを停止する
//timeTrigger.Repetition.StopAtDurationEnd = true;
//停止するまでの時間
//timeTrigger.ExecutionTimeLimit = "PT12H";
//有効期限
//timeTrigger.EndBoundary = "2014-01-25T22:37:37";
//有効
//timeTrigger.Enabled = false;
//---------------------
//スケジュールに従う(毎日)
//---------------------
//間隔
//dailyTrigger.DaysInterval = 2;
//開始
//dailyTrigger.StartBoundary = "2014-01-24T22:37:37";
//遅延時間を指定する
//dailyTrigger.RandomDelay = "PT8H";
//繰り返し間隔
//dailyTrigger.Repetition.Interval = "PT3H";
//継続時間
//dailyTrigger.Repetition.Duration = "P2D";
//繰り返し継続時間の最後に実行中のすべてのタスクを停止する
//dailyTrigger.Repetition.StopAtDurationEnd = true;
//停止するまでの時間
//dailyTrigger.ExecutionTimeLimit = "PT12H";
//有効期限
//dailyTrigger.EndBoundary = "2014-01-25T22:37:37";
//有効
//dailyTrigger.Enabled = false;
//---------------------
//スケジュールに従う(毎週)
//---------------------
//間隔
//weeklyTrigger.WeeksInterval = 3;
//日曜日~土曜日
//weeklyTrigger.DaysOfWeek = 7;
//開始
//weeklyTrigger.StartBoundary = "2014-01-24T22:37:37";
//遅延時間を指定する
//weeklyTrigger.RandomDelay = "PT8H";
//繰り返し間隔
//weeklyTrigger.Repetition.Interval = "PT3H";
//継続時間
//weeklyTrigger.Repetition.Duration = "P2D";
//繰り返し継続時間の最後に実行中のすべてのタスクを停止する
//weeklyTrigger.Repetition.StopAtDurationEnd = true;
//停止するまでの時間
//weeklyTrigger.ExecutionTimeLimit = "PT12H";
//有効期限
//weeklyTrigger.EndBoundary = "2014-01-25T22:37:37";
//有効
//weeklyTrigger.Enabled = false;
//---------------------
//スケジュールに従う(毎月)- 日
//---------------------
//月
//monthlyTrigger.MonthsOfYear = 7;
//日
//monthlyTrigger.DaysOfMonth = 1;
//開始
//monthlyTrigger.StartBoundary = "2014-01-24T22:37:37";
//遅延時間を指定する
//monthlyTrigger.RandomDelay = "PT8H";
//繰り返し間隔
//monthlyTrigger.Repetition.Interval = "PT3H";
//継続時間
//monthlyTrigger.Repetition.Duration = "P2D";
//繰り返し継続時間の最後に実行中のすべてのタスクを停止する
//monthlyTrigger.Repetition.StopAtDurationEnd = true;
//停止するまでの時間
//monthlyTrigger.ExecutionTimeLimit = "PT12H";
//有効期限
//monthlyTrigger.EndBoundary = "2014-01-25T22:37:37";
//有効
//monthlyTrigger.Enabled = false;
//---------------------
//スケジュールに従う(毎月)- 曜日
//---------------------
//月
//monthlyDOWTrigger.MonthsOfYear = 1;
//週
//monthlyDOWTrigger.WeeksOfMonth = 7;
//曜日
//monthlyDOWTrigger.DaysOfWeek = 1;
//開始
//monthlyDOWTrigger.StartBoundary = "2014-01-24T22:37:37";
//遅延時間を指定する
//monthlyDOWTrigger.RandomDelay = "PT8H";
//繰り返し間隔
//monthlyDOWTrigger.Repetition.Interval = "PT3H";
//継続時間
//monthlyDOWTrigger.Repetition.Duration = "P2D";
//繰り返し継続時間の最後に実行中のすべてのタスクを停止する
//monthlyDOWTrigger.Repetition.StopAtDurationEnd = true;
//停止するまでの時間
//monthlyDOWTrigger.ExecutionTimeLimit = "PT12H";
//有効期限
//monthlyDOWTrigger.EndBoundary = "2014-01-25T22:37:37";
//有効
//monthlyDOWTrigger.Enabled = false;
//---------------------
//アイドル時
//---------------------
//なし
//---------------------
//タスクの登録/変更時
//---------------------
//開始
//registrationTrigger.StartBoundary = "2014-01-24T22:37:37";
//繰り返し間隔
//registrationTrigger.Repetition.Interval = "PT3H";
//継続時間
//registrationTrigger.Repetition.Duration = "P2D";
//繰り返し継続時間の最後に実行中のすべてのタスクを停止する
//registrationTrigger.Repetition.StopAtDurationEnd = true;
//停止するまでの時間
//registrationTrigger.ExecutionTimeLimit = "PT12H";
//有効期限
//registrationTrigger.EndBoundary = "2014-01-25T22:37:37";
//有効
//registrationTrigger.Enabled = false;
//---------------------
//スタートアップ時
//---------------------
//なし
//---------------------
//ログオン時
//---------------------
//logonTrigger.UserId = "**********";
//---------------------
//ユーザセッションからの接続時
//---------------------
//ローカルコンピュータからの接続
//sessionStateChangeTrigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_CONSOLE_CONNECT;
//リモートコンピュータからの接続
//sessionStateChangeTrigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_REMOTE_CONNECT;
//特定のユーザー/グループ
//sessionStateChangeTrigger.UserId = "**********";
//---------------------
//ユーザセッションからの切断時
//---------------------
//ローカルコンピュータからの接続
//sessionStateChangeTrigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_CONSOLE_DISCONNECT;
//リモートコンピュータからの接続
//sessionStateChangeTrigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_REMOTE_DISCONNECT;
//特定のユーザー/グループ
//sessionStateChangeTrigger.UserId = "**********";
//---------------------
//ワークステーションロック時
//---------------------
//sessionStateChangeTrigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_LOCK;
//特定のユーザー/グループ
//sessionStateChangeTrigger.UserId = "**********";
//---------------------
//ワークステーションアンロック時
//---------------------
//sessionStateChangeTrigger.StateChange = _TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_UNLOCK;
//特定のユーザー/グループ
//sessionStateChangeTrigger.UserId = "**********";
//******************************************:
//操作タブ
//******************************************:
//---------------------
//プログラムの開始
//---------------------
//プログラム/スクリプト
//execAction.Path = "スクリプト.exe";
//引数の追加(オプション)
//execAction.Arguments = "引数";
//開始(オプション)
//execAction.WorkingDirectory = "開始オプション";
//---------------------
//電子メール送信
//---------------------
//差出人
//emailAction.From = "差出人";
//送信先
//emailAction.To = "送信先";
//件名
//emailAction.Subject = "件名";
//テキスト
//emailAction.Body = "テキスト";
//SMTPサーバー
//emailAction.Server = "SMTPサーバー";
//---------------------
//メッセージの表示
//---------------------
//タイトル
//showMessageAction.Title = "タイトル";
//メッセージ
//showMessageAction.MessageBody = "メッセージ";
//******************************************:
//条件タブ
//******************************************:
//タスクを開始するまでのコンピュータのアイドル時間
//taskSettings.RunOnlyIfIdle = true;
//タスクを開始するまでのコンピュータのアイドル時間
//idleSettings.IdleDuration = "PT5M";
//アイドル状態にするまでの時間
//idleSettings.WaitTimeout = "PT1H";
//コンピュータがアイドル状態でない場合は停止する
//idleSettings.StopOnIdleEnd = true;
//再びアイドル状態になったら再起動する
//idleSettings.RestartOnIdle = false;
//コンピュータをAC電源で使用してる場合のみタスクを開始する
//taskSettings.DisallowStartIfOnBatteries = true;
//コンピュータの電源をばっているに切り替える場合は停止する。
//taskSettings.StopIfGoingOnBatteries = false;
//タスクの実行時にスリープを解除する
//taskSettings.WakeToRun = true;
//次のネットワーク接続が使用可能な場合のみタスクを開始する
//taskSettings.RunOnlyIfNetworkAvailable = true;
//networkSettings.Name = "ネットワーク";
//******************************************:
//設定
//******************************************:
//タスクを要求時に実行する
//taskSettings.AllowDemandStart = true;
//スケジュールされた時刻にタスクを開始できなかった場合、すぐにタスクを実行する
//taskSettings.StartWhenAvailable = true;
//タスクが失敗した場合の再起動の間隔
//taskSettings.RestartInterval = "PT1M";
//再起動試行の最大数
//taskSettings.RestartCount = 3;
//タスクを停止するまでの時間
//taskSettings.ExecutionTimeLimit = "P1D";
//要求時に実行中のタスクが終了しない場合、タスクを強制的に停止るする
//taskSettings.AllowHardTerminate = true;
//タスクが再度実行するようにスケジュールされていない場合に削除されるまでの時間
//taskSettings.DeleteExpiredTaskAfter = "P30D";
//タスクがすでに実行中の場合に適用される規則
//新しいインスタンスを開始しない
//taskSettings.MultipleInstances = _TASK_INSTANCES_POLICY.TASK_INSTANCES_IGNORE_NEW;
//新しいインスタンスを並列で実行
//taskSettings.MultipleInstances = _TASK_INSTANCES_POLICY.TASK_INSTANCES_PARALLEL;
//新しいインスタンスをキューに追加
//taskSettings.MultipleInstances = _TASK_INSTANCES_POLICY.TASK_INSTANCES_QUEUE;
//既存のインスタンスの停止
//taskSettings.MultipleInstances = _TASK_INSTANCES_POLICY.TASK_INSTANCES_STOP_EXISTING;
try
{
rootfolder.RegisterTaskDefinition(path,
taskDefinition,
(int)_TASK_CREATION.TASK_CREATE_OR_UPDATE,
null,
null,
_TASK_LOGON_TYPE.TASK_LOGON_NONE,
null);
}
catch (System.UnauthorizedAccessException e)
{
throw e;
}
catch (System.Exception e)
{
throw e;
}
}
finally
{
if (rootfolder != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(rootfolder);
}
}
finally
{
if (taskservice != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(taskservice);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment