0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

タスクスケジューラーにアプリの自動起動を設定する方法

Last updated at Posted at 2024-12-26

Windowsでアプリの自動起動を設定する方法はいくつかありますが、ここでは、タスクスケジューラーを利用して実装してみます。

タスクスケジューラー

こんなやつです。Windows管理ツールの中にいます。
image.png
毎日定刻とか、ユーザーのログインといったトリガーで起動して、指定された処理を実行したりするための、Windowsの中核的なサービスの一つです。
これのWin32 APIは、そのままではC#から利用することができないので、まずは、NuGetで公開されているラッパーライブラリをインストールします。

 Install-Package TaskScheduler

自動起動の基本形

これを一般ユーザー権限で実行すると、そのユーザーがログインしたときに、そのユーザーの権限で自動起動するタスクが登録されます。
このコードは、UACなしで、一般ユーザー権限で実行できます。

string taskName = "MyTask";
string taskExeFile = "MyTask.exe"; // フルパスで
using ( TaskService ts = new TaskService() ) {
   TaskDefinition td = ts.NewTask();
   td.RegistrationInfo.Description = "Schedule to run " + taskName;
   td.Principal.RunLevel = TaskRunLevel.LUA;
   td.Principal.LogonType = TaskLogonType.InteractiveToken;
   td.Actions.Add( new ExecAction( taskExeFile ) );
   td.Triggers.Add( new LogonTrigger() { UserId = WindowsIdentity.GetCurrent().User.ToString() } );
   ts.RootFolder.RegisterTaskDefinition(
       taskName,
       td,
       TaskCreation.CreateOrUpdate,
       null,
       null,
       TaskLogonType.InteractiveToken,
       null );
}

管理者権限で起動

6行目、RunLevelを書き換えると、管理者権限で起動するようになります。
このコードは、実行するには管理者権限が必要です。

- td.Principal.RunLevel = TaskRunLevel.LUA;
+ td.Principal.RunLevel = TaskRunLevel.Highest;

誰がログインしても起動

9行目、LogonTriggerオブジェクトに何も指定しなければ、誰がログインしても自動起動するようになります。
このコードは、実行するには管理者権限が必要です。

- td.Triggers.Add( new LogonTrigger() { UserId = WindowsIdentity.GetCurrent().User.ToString() } );
+ td.Triggers.Add( new LogonTrigger() );

誰がログインしても管理者権限で起動

上記二つの合わせ技です。(ソースコードは省略)
このコードは、実行するには管理者権限が必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?