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起動時に実行されるようにするためのコードを紹介します。
Public Shared Sub SetCurrentVersionRun()
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
public static void SetCurrentVersionRun()
{
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号」で紹介したものです。)
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
- このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
- Windows Vista以降でUACが有効になっていると、レジストリへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。