Windows 起動時の自動実行(レジストリ&スタートアップ)まとめ

最近のお仕事の1つとして Visual C++ による Windows アプリ作成なんてこともやってます。Perl 使いだったはずなのに、PHP やら iアプリの Java やら Tomcat 使った Servlet やら Win32 やら、もぉ何でも屋さんになっちゃってます。PHP 以外は少しは過去に触ってきた経験がありますが、随分と時が経っているので知識は忘却の彼方です。

というわけで苦労してます。

中でも最近はまっていたのは Windows アプリのインストーラー周りです。アプリを OS 起動時に自動起動させるレジストリの設定を理解してませんでした。この辺は初めてやることなので右も左もわからない状態でしたが、素人なりに覚えたことを忘れないようにまとめておきます。

- スポンサーリンク -

レジストリキーと スタートアップフォルダの起動順序の関係

参考: [INFO] Run、RunOnce、RunServices、RunServicesOnce レジストリ キーと [スタートアップ] フォルダの関係
参考: レジストリの RunOnce キーの定義

<マシン起動>
 ↓
※Windows 95、98、Me の場合のみ
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
 ↓
<ログオン画面>
 ↓
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
 ↓
<スタートアップフォルダ>
 ↓
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

留意事項

  • HKEY_LOCAL_MACHINE\...\RunOnce キー以外のすべてのキーとそのエントリは、非同期的に読み込まれ、RunServices キーおよび RunServicesOnce キー内のすべてのエントリは、同時に実行される可能性がある。
  • HKEY_LOCAL_MACHINE\...\RunOnce キー内のエントリは、未定義の順序で同期的に読み込まれる。
  • HKEY_LOCAL_MACHINE\...\RunOnce キーは同期的に読み込まれるため、そのすべてのエントリは、HKEY_LOCAL_MACHINE\...\Run、HKEY_CURRENT_USER\...\Run、HKEY_CURRENT_USER\...\RunOnce、および[スタートアップフォルダ エントリが読み込み可能になる前に読み込みが完了している必要がある。
  • RunServicesOnce キーと RunServices キーは、Windows 95、98、Me では、ユーザーがログオンする前に読み込まれ、ログオンのダイアログ ボックスとは非同期的に実行される。
  • HKEY_LOCAL_MACHINE\...\RunOnce については同期的に読み込まれる必要があるため、そのエントリは、RunServicesOnce キーと RunServices キーの読み込みが完了するまで読み込みが開始されない。
  • デフォルトでは、セーフ モードのとき、Run キーは無視される。
  • RunOnce に関しては、値名の頭にアスタリスクを付けると、プログラムをセーフ モードで実行させることができる。
  • RunOnce に関しては、値名の頭に感嘆符を付けると、コマンドが完了するまで、値の削除を遅延させることができる。またそのように指定しないかぎり、コマンド ラインが実行される前に値は削除される。その結果、RunOnce 操作が適切に実行できない場合、エラーになったコンポーネントは、コンピュータを次に起動するときまで、実行されなくなる。


自動起動まわりのレジストリキーとレジストリエントリについて

参考: 起動時に実行 - いじくるつくーるのヘルプ

HKEY_LOCAL_MACHINE\・・・
・ 全てのユーザに適用する設定

HKEY_CURRENT_MACHINE\・・・
・ ログオンユーザに適用する設定

( HKLM | HKCU )\Software\Microsoft\Windows\CurrentVersion\Run
・ OS 起動時(シェル起動の直前)に毎回実行させる

( HKLM | HKCU )\Software\Microsoft\Windows\CurrentVersion\RunOnce
・ OS 起動時(シェル起動の直前)に毎回実行させ、実行後値をを削除する。次回起動時には実行されない

( HKLM | HKCU )\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
・ OS 起動時(シェル起動の直前)に毎回実行させ、実行後値をを削除する。次回起動時には実行されない
・ Windows 95/NT 4.0では利用不可
・ RunOnceとの違いは、起動のタイミングを調節できることと、起動順序を制御できること

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
・ ログオン前に毎回実行(全ユーザー)
・ Windows 95/98/Meのみ

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
・ ログオン前に毎回実行(全ユーザー)
・ 実行後削除され次回起動時には実行されない
・ Windows 95/98/Meのみ


スタートアップフォルダについて

参考: Windows NT系OS起動時の、自動実行(レジストリ、Startupフォルダ)

\Documents and Settings\ユーザー名\スタート メニュー\プログラム\スタートアップ
・ OS 起動時に毎回実行させる(ログオンユーザーごと)
・ システム情報(msinfo32)では[スタートアップ]と表示される
・ システム構成ユーティリティ(msconfig)では[Startup]と表示される

\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ
・ OS 起動時に毎回実行させる(全ユーザー)
・ システム情報(msinfo32)では[共通スタートアップ]と表示される
・ システム構成ユーティリティ(msconfig)では[Common Startup]と表示される

\Documents and Settings\Default User\スタート メニュー\プログラム\スタートアップ
・ 新しく作成されたユーザーアカウントで、自動的にスタートアップ項目が作成される雛形作成用。

msconfig のサンプル画面キャプチャ

img001.jpg

msinfo32 のサンプル画面キャプチャ

img002.jpg


※ちょうど、今メンテナンスしているソフトウェアが、サポート切れしている Windows 98, Me, 2000, XP をターゲットとしたものなので、上記情報は古い情報かもしれません。Windows Vista, 7 ではレジストリ・アクセス権の仕様変更により、HKEY_LOCAL_MACHINE 配下に記述された RunOnce と RunOnceEx の設定は、標準ユーザー (Users グループのユーザー) でログオンすると実行されないなど、変更があるようなので注意が必要です。

その他、アプリの自動実行系の話はウィルス感染の話と関連性が深く、
Windows NT/2000/XP/2003 がウイルスに感染したときにウイルスが自動実行されるよう設定される場所
あたりの情報も大変参考になります。

ウィルスに感染すると汚染されている可能性のあるレジストリ一覧

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
HKEY_CLASSES_ROOT\comfile\shell\open\command
HKEY_CLASSES_ROOT\exefile\shell\open\command
HKEY_CLASSES_ROOT\piffile\shell\open\command
HKEY_CLASSES_ROOT\txtfile\shell\open\command

APIで学ぶWindows徹底理解―できるプログラマになるための (日経BPパソコンベストムック)
安室 浩和 日経ソフトウエア編
日経BP社
売り上げランキング: 21478
- スポンサーリンク -

関連する記事&スポンサーリンク