内気なもんた君

時々日本語化してます

RunOnce と RunOnceEx

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 を使用します。

 

ちょっとややこしいので、備忘録を兼ねてまとめてみました。

間違ってたらゴメン