サンプル集  >  C#  >  タスクスケジューラー
タスクスケジューラー
2014/04/08

タスクスケジューラーに簡単なアプリを登録して実行してみます。

◆環境
OS Windows 7 Professional Service Pack 1 64bit
C# Microsoft Visual C# 2010 01018-587-4054044-70237

[ファイル]-[新規作成]-[プロジェクト]を選択。

[コンソール アプリケーション]を選択し、名前に「HelloTask」と入力し「OK」。

プロジェクトを右クリックし「参照の追加」を選択。

System.Windows.Forms を選択し「OK」ボタンを押下。

タスクスケジューラーで起動させる、メッセージボックスを表示するだけのプログラムを作成します。

Program.cs
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace HelloTask
{
    class Program
    {
        static void Main( string[] args )
        {
            MessageBox.Show( "Hello Task" );
        }
    }
}

タスクスケジューラーにタスクを登録するプログラムを作成します。

[ファイル]-[新規作成]-[プロジェクト]を選択。

[コンソール アプリケーション]を選択し、名前に「SetTask」と入力し、「ソリューションに追加」を選択し「OK」。

作成した HelloTask を1分間隔で実行するタスクを HelloTask という名前で登録します。 既に同じタスクがあった場合、タスクを削除するようにしました。

Program.cs
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
69: 
70: 
71: 
72: 
73: 
74: 
75: 
76: 
77: 
78: 
79: 
80: 
81: 
82: 
83: 
84: 
85: 
86: 
87: 
88: 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SetTask
{
    class Program
    {
        static void Main( string[] args )
        {
            string res;
            int    ret;

            string taskName = "HelloTask";
            string cmd;

            // タスクの存在チェック
            cmd = "schtasks /query"
                + " /tn " + taskName    // タスク名
                ;
            Console.WriteLine( "cmd=[{0}]", cmd );

            ret = consoleExecute( cmd, out res );
            Console.WriteLine( "ret=[{0}]", ret );

            if ( ret == 1 )
            {
                // タスクの登録
                cmd = "schtasks /create"
                    + " /tn " + taskName  // タスク名
                    + " /tr C:\\Temp\\HelloTask.exe"
                                          // 実行ファイル(フルパス)
                    + " /sc MINUTE"       // 実行間隔:分
                    ;
                Console.WriteLine( "cmd=[{0}]", cmd );
            }
            else
            {
                // タスクの削除
                cmd = "schtasks /delete"
                    + " /tn " + taskName    // タスク名
                    + " /f"                 // 確認不要
                    ;
                Console.WriteLine( "cmd=[{0}]", cmd );
            }
            ret = consoleExecute( cmd, out res );
            Console.WriteLine( "ret=[{0}]", ret );

            Console.ReadKey();
        }

        private static int consoleExecute( string cmd
                                         , out string res
                                         )
        {
            System.Diagnostics.ProcessStartInfo psi
            = new System.Diagnostics.ProcessStartInfo();

            psi.FileName
            = System.Environment
                        .GetEnvironmentVariable( "ComSpec" );

            // 出力を読み取れるように設定
            psi.RedirectStandardInput  = false;
            psi.RedirectStandardOutput = true;
            psi.UseShellExecute        = false;

            // ウィンドウを非表示
            psi.CreateNoWindow = true;

            // 実行コマンド
            psi.Arguments = @"/c " + cmd;

            // 実行
            System.Diagnostics.Process p
            = System.Diagnostics.Process.Start( psi );

            // 出力を読み取る
            res = p.StandardOutput.ReadToEnd();

            // 終了待ち
            p.WaitForExit();

            return( p.ExitCode );
        }
    }
}

実行します。

cmd=[schtasks /query /tn HelloTask]
ret=[1]
cmd=[schtasks /create /tn HelloTask /tr C:\Temp\HelloTask.exe /sc MINUTE]
ret=[0]

タスクの登録に成功したようです。 しばらく待っているとメッセージボックスが表示されました。

ダイアログを閉じて1分待つと再度ダイアログが表示されました。 タスクスケジューラーはうまく動いているようです。

[コントロール パネル]-[管理ツール]-[タスク スケジューラー]を見ると HelloTask が登録されていました。

このままだと1分置きにダイアログが表示され続けるので、再度実行してタスクを削除します。

cmd=[schtasks /query /tn HelloTask]
ret=[0]
cmd=[schtasks /delete /tn HelloTask /f]
ret=[0]

タスクを削除しました。

▲ PageTop  ■ Home


Copyright (C) 2014 ymlib.com