DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

OS起動時にプログラムを自動的に実行する
OS起動時に一回だけプログラムを自動的に実行する

これは、.NETの知識というより、Windowsに関する知識ということになるでしょう。

OS起動時に指定したプログラムを自動的に実行されるようにするには、Windowsのプログラム内スタートアップフォルダにショートカットを作成するか、レジストリのRunキーに登録するというのが一般的な方法です。.NETではショートカットの作成が簡単でないため、ここではレジストリのRunキーに書き込む方法を紹介します。

OS起動時に起動させるプログラムが登録されているキーには、次の4つがあります。(正確には、これらのキーに登録されたプログラムは新規ユーザーがログオンする時に実行されます。また、これ以外のキーもあります。詳しくは、下に紹介するマイクロソフトサポート技術情報をご覧ください。)

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

これらのキーの内、HKEY_LOCAL_MACHINEとHKEY_CURRENT_USERの違いは、マシン毎の設定か、ユーザー毎の設定かであり、RunキーとRunOnceキーの違いは、登録されているプログラムを新規ユーザーがログオンするたびに実行するか、始めの一回のみ実行するかです。

よって通常はRunキーを使用し、RunOnceキーは現在使用中で削除できないファイルを次回起動時に削除するなどの目的で使用します。

なお、Runキーについて詳しくは、以下のマイクロソフトサポート技術情報をご覧ください。

以下に、HKEY_CURRENT_USERのRunキーにアプリケーションの実行ファイルのパスを登録し、OS起動時に実行されるようにするためのコードを紹介します。

VB.NET
コードを隠すコードを選択
''' <summary>
''' CurrentUserのRunにアプリケーションの実行ファイルパスを登録する
''' </summary>
Public Shared Sub SetCurrentVersionRun()
    'Runキーを開く
    Dim regkey As Microsoft.Win32.RegistryKey = _
        Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
        "Software\Microsoft\Windows\CurrentVersion\Run", True)
    '値の名前に製品名、値のデータに実行ファイルのパスを指定し、書き込む
    regkey.SetValue(Application.ProductName, Application.ExecutablePath)
    '閉じる
    regkey.Close()
End Sub
C#
コードを隠すコードを選択
/// <summary>
/// CurrentUserのRunにアプリケーションの実行ファイルパスを登録する
/// </summary>
public static void SetCurrentVersionRun()
{
    //Runキーを開く
    Microsoft.Win32.RegistryKey regkey =
        Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
        @"Software\Microsoft\Windows\CurrentVersion\Run", true);
    //値の名前に製品名、値のデータに実行ファイルのパスを指定し、書き込む
    regkey.SetValue(Application.ProductName, Application.ExecutablePath);
    //閉じる
    regkey.Close();
}
  • 履歴:
  • 2010/2/26 誤字修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、レジストリへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。