RunOnceキーについてのメモ

RunとRunOnceのレジストリキーは、どちらもユーザーのログイン時に指定されたプログラムや処理を自動実行する。

Runキーに登録された処理は、ユーザーがログインするたびに毎回実行されるが、RunOnceキーに登録された処理は、一度実行されると、キーから処理が削除される。

今回はRunOnceの挙動をテストしてみた。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceHelloというエントリを追加した。

ログオン時にtest.txtがメモ帳で開かれた。

RunOnceキーを確認してみるとHelloのエントリが削除されていた。


このように 基本的にRunOnceキーに登録された処理は一度実行されると削除されるが、スクリプトなどによってRunOnceキーの削除後に、再度同様のRunOnceキーを作成することによって処理を永続化させることが出来る。

以下のバッチファイル test.batHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Helloに登録した。

@echo off
REM cmd.exe /c test.bat
start notepad.exe C:\Users\user\Desktop\hello.txt
reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce /v Hello /t REG_SZ /d "cmd.exe /c C:\Users\user\Desktop\test.bat"

上記のバッチファイル test.batはメモ帳でhello.txtというファイルを開いた後、自身を再度RunOnceキーに登録する。

RunOnceキーの登録後に再度ログオンしたところ、hello.txtが開かれてtest.batが実行されたのが確認できた。レジストリを確認すると、HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Helloは健在だった。その後もログオンするたびにhello.txtが開かれた。

通常ならRunOnceキーは処理が実行されると削除されるが、上記の例ではRunOnceキーに登録されているバッチファイル test.bat に再度同様のRunOnce\Helloキーを登録するための命令文 が記述されているため、RunOnce\Helloキー削除後に再びRunOnce\Helloキーが作成される。

よってRunOnceキーも使い方次第では永続化メカニズムとして利用できる。

参考
https://docs.microsoft.com/en-us/windows/win32/setupapi/run-and-runonce-registry-keys

Leave a Reply

Your email address will not be published.