これは、.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起動時に実行されるようにするためのコードを紹介します。
''' <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
/// <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(); }
(この記事は、「.NETプログラミング研究 第41号」で紹介したものです。)