RunOnce と RunOnceEx
| Run | RunOnce | RunOnceEx | |
| HKCU | 現ユーザーのログイン時に毎回実行。 | 現ユーザーのログイン時に1度だけ実行。 実行前にレジストリキーの値が削除される。 |
現ユーザーのログイン時に1度だけ実行。 処理全体が完了するまでレジストリキーの値が保持される。 |
| HKLM | 全ユーザーのログイン時に毎回実行。 | 全ユーザーのログイン時に1度だけ実行。 実行前にレジストリキーの値が削除される。 |
全ユーザーのログイン時に1度だけ実行。 処理全体が完了するまでレジストリキーの値が保持される。 |
* HKLM の TunOnce と RunOnceEx は、管理者アカウントのみで実行される。
* データの値は、260文字以下。
感嘆符 (!) を付けた RunOncと RunOnceEx の違い
| 特徴 | 感嘆符付き RunOnce | RunOnceEx |
| 削除タイミング | コマンド実行後に削除 | コマンド全体が完了するまで値を保持 |
| プロセス生成 | 各コマンドが個別のプロセスとして実行 | 同一プロセス内で効率的に処理 |
| 依存関係の設定 | 不可 | DLL の依存関係を設定可能 |
| エラーハンドリング | コマンド成功 : 実行後にキーが削除される コマンド失敗 : 次回起動時に再試行される |
同様 |
| 管理者権限(HKLMの場合) | 管理者権限でのみ実行される | 同様 |
| UI 表示 | なし | 処理状況を示すダイアログ表示可能 |
感嘆符付き RunOnce の例
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce]
"!example"="C:\\cmd\\example.exe"
RunOnceEx の例
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx]
"TITLE"="example"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\01]
@="example-1"
"1"="C:\\cmd\\example-1.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\02]
@="example-2"
"1"="C:\\cmd\\example-2.exe"
"2"="C:\\cmd\\example-3.exe"
* 補足
感嘆符付き RunOnce 以下に複数キーを作成しても実行順序は保証されないので、実行順序を指定する場合は RunOnceEx を使用します。
ちょっとややこしいので、備忘録を兼ねてまとめてみました。
間違ってたらゴメン