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キーも使い方次第では永続化メカニズムとして利用できる。

※ただし、参考リンクの末尾にも記載されているがRunOnceキーを常駐化の手段として使用することは推奨されていない。(RunOnceキーに繰り返しエントリーを作成する行為はWindowのセットアップに干渉するため。)

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

2 Replies to “RunOnceキーについてのメモ”

  1. >RunOnceキーに登録されているバッチファイル test.bat に再度同様のRunOnce\Helloキーを登録するための命令文 が記述されている

    そういうことをしてはいけない、ということが以下に書いてあります。
    https://docs.microsoft.com/en-us/windows/win32/setupapi/run-and-runonce-registry-keys

    <訳>
    これらのキーから実行されるプログラムは、その実行中にキーに書き込んではいけません。これは、キーの下に登録された他のプログラムの実行を妨害することになります。アプリケーションは、RunOnceキーをアプリケーションのセットアップを完了するような一時的な条件でのみ使用する必要があります。アプリケーションは、RunOnceの下で継続的にエントリーを再作成してはなりません。これは、Windowsセットアップに干渉するためです。

    1. コメントありがとうございます。指摘していただいた内容を記事に追記いたしました。

Leave a Reply

Your email address will not be published. Required fields are marked *