single.php

C# Windowsのスタートアップに登録する方法

C#のWinFormsプロジェクトで、Windowsのサインイン時にアプリが実行されるスタートアップを設定する場合の方法について備忘録的に投稿します。

スタートアップにショートカットを保存

Windowsのサインイン時に実行されるためのスタートップの仕組みは、レジストリやタスクスケジューラなどの複数の方法があります。

最も簡単なのはアプリのショートカットを所定のフォルダーに追加する方法です。

汎用化するために、こんな感じにクラス化してみました。

using System;
using System.IO;
using System.Reflection;
using IWshRuntimeLibrary;
// 参照追加が必要(Windows Script Host Object Model)

namespace Sample
{
  internal class WinAppStartUp
  {
    private readonly string _appName;
    private readonly string _exePath;
    private readonly string _shortcutPath;

    public WinAppStartUp(string? appName = null)
    {
      _exePath = Application.ExecutablePath;
      _appName = appName ?? Path.GetFileNameWithoutExtension(_exePath);

      string startupDir = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
      _shortcutPath = Path.Combine(startupDir, _appName + ".lnk");
    }

    /// <summary>
    /// スタートアップ登録状態の確認
    /// </summary>
    public bool IsStartUp()
    {
      if (!System.IO.File.Exists(_shortcutPath))
      {
        return false;
      }

      try
      {
        var shell = new WshShell();
        var shortcut = (IWshShortcut)shell.CreateShortcut(_shortcutPath);

        return string.Equals(
            shortcut.TargetPath,
            _exePath,
            StringComparison.OrdinalIgnoreCase);
        }
        catch
        {
          return false;
        }
      }

    /// <summary>
    /// スタートアップ登録・解除
    /// </summary>
    /// <param name="enable">true:登録 / false:解除</param>
    /// <returns>true:成功 / false:失敗</returns>
    public bool SetStartUp(bool enable)
    {
      try
      {
        if (enable)
        {
          var shell = new WshShell();
          var shortcut = (IWshShortcut)shell.CreateShortcut(_shortcutPath);

          shortcut.TargetPath = _exePath;
          shortcut.WorkingDirectory = Path.GetDirectoryName(_exePath);
          shortcut.Description = _appName;
          shortcut.Save();
        }
        else
        {
          if (System.IO.File.Exists(_shortcutPath))
          {
            System.IO.File.Delete(_shortcutPath);
          }
        }

        return true;
      }
      catch
      {
        return false;
      }
    }
  }
}

利用する場合は、クラスをインスタンス化して、IsStartUpプロシージャーで確認、SetStartUp プロシージャーでスタートアップフォルダーへのショートカットの追加と削除を行います。

var winappstartUp = new WinAppStartUp("アプリ名");
bool isStartUp = winappstartUp.IsStartUp();
winappstartUp.SetStartUp(!isStartUp);

まとめ

今回は短い記事ですが、Windowsのサインイン時にアプリが実行されるスタートアップを設定する場合の方法について書きました。

Windowsのサインイン時に実行されるスタートアップは、レジストリやタスクスケジューラなど複数の方法が用意されていますが、所定のフォルダーにアプリへのショートカットを追加する方法が分かりやすく簡単です。

Windowsのサインイン時にアプリが実行されるスタートアップへの登録や解除をしたい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です