ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

C# タスクスケジューラへタスクを登録するツール

作ってみました!

時間とユーザー名だけ自由に指定できるようにしたものです。
ログイン時のユーザー名も取得して表示しています。

f:id:moko_03_25:20190618012949j:plain

元々Windowsのタスクスケジューラで設定するタスクはXMLファイルでインポート/エクスポート可能なので、XMLをインポートする形にします。

タスク追加の実装


まずVisual StudioWindowsフォームアプリのプロジェクトを開始したら、ソリューションエクスプローラーの「参照」で右クリック、「参照の追加」でダイアログを開き、「COM」を選択して検索欄に「task」と入力。

すると「TaskScheduler 1.1 Type Library」が出てくるのでチェックをONにしてからOKボタンを押します。

次にUsingディレクティブに「TaskScheduler」を追加します。

ここまでが準備になります。

あとはこちらの記事の「XMLからインポートすることでタスクを登録する」の項目を参考に実装すればOKです。

最後に実行者がタスクをチェックできるように、タスクスケジューラを起動したい場合はusingディレクティブに「System.Diagnostics」を追加して、下記のように記述すればOK(ちなみに私の環境はwindows10です)。

Process.Start(@"C:\WINDOWS\system32\taskschd.msc");

これでうまくいきました!

ちなみに同じパス&名前のタスクがある場合は上書きされるだけでエラーにはなりません。

XMLの書き換えについて


おまけです。

XMLの特定のタグの値を書き換えるには、下記の方法が一番楽でした。
Usingディレクティブに「System.Xml」を追加するのをお忘れなくっ。

// 関数:XMLの置換
// 引数「path」はxmlの場所で「name」と「value」はXML内の <name>value</name>
private void WriteSettings(string path, string name, string value) { XmlDocument xml = new XmlDocument(); xml.Load(path); XmlNodeList xns = xml.GetElementsByTagName(name); foreach (XmlNode xn in xns) { xn.InnerText = value; } xml.Save(path); }

以上、これでタスクを登録するようなツールを作ってチーム内に配布できますね!

お試しあれ!

2019.6.19 追記:
自宅では登録できるのですが、会社で使ってみて登録できなかったので調査中‥
また、ログインユーザー名を入力できるようにしてますが意味が無かった模様。。