Hebikuzure's Tech Memo

2010年4月2日

標準ユーザーでログオンすると RunOnce / RunOnceEX キーのコマンドが実行されない

Filed under: Windows Info — hebikuzure @ 8:10 AM

Standard user: RunOnce and RunOnceEx are not being executed
http://support.microsoft.com/kb/2021405

Windows には起動時に自動実行するプログラムを制御するためのレジストリ キーが用意されている。このキーについては以下のサポート技術情報で解説されている。

レジストリの RunOnce キーの定義
http://support.microsoft.com/kb/137367

このうち RunOnce と RunOnceEx は次回ログオン時に 1 回だけ実行されるよう設定するキーで、キーの値として設定されているコマンドの実行前に削除される動作になっている (この動作については この記事この技術情報に詳しい)。

さて Windows Vista / Windows 7 ではレジストリ アクセス権の仕様変更により、以下のように HKEY_LOCAL_MACHINE 配下に記述された RunOnce と RunOnceEx の設定は、標準ユーザー (Users グループのユーザー) でログオンすると実行されない。サポート技術情報 2021405 はこの現象について解説している。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

実際に以下の手順で検証してみた。

  1. Windows 7 に管理者ユーザーとしてログオン
  2. 以下のスクリプト (VBS) ファイルを作成
     Wscript.Echo “Done!”
  3. レジストリに以下を設定
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]
    “TEST”=”C:\Users\Public\Documents\TEST.vbs”
  4. ログオフし、標準ユーザーとしてログオン ⇒ スクリプトは実行されない。RunOnce キーの値は削除されない
  5. ログオフし、管理者ユーザーとしてログオン ⇒ スクリプトが実行される。RunOnce キーの値は削除される

なお HKEY_CURRENT_USER 配下に記述した RunOnce と RunOnceEx は実行されるし、HKEY_LOCAL_MACHINE 配下でも Run キーの設定はユーザーの権限にかかわらず実行される。 おそらくコマンドの実行前に値を削除する動作で標準ユーザーには削除する権限が無いため失敗し、その時点でエラーになってコマンドの実行自体も行われないと推測される。

RunOnce や RunOnceEx キーはソフトウェアのインストールなどで再起動やログオフ/再ログオンが必要になる場合に初期設定を走らせるのに使われることがあるキーだが、その場合は再起動/再ログオン後に管理者権限の無いユーザーでログオンすると必要な初期設定が行われない事になってしまう。そのため Windows Vista / Windows 7 に対応したインストーラの動作を作りこむ場合には十分な注意が必要だろう。

参考資料

1件のコメント »

  1. […] […]

    ピンバック by 人気記事ベスト20 « Hebikuzure's Tech Memo — 2011年6月4日 @ 1:26 PM


RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。