REGEDIT.EXEとREGEDT32.EXEの使い分け
REGEDIT.EXE では自動設定できないレジストリの自動設定方法

対象プラットフォーム

質問

Windows NT 4.0 クライアントにログオンするユーザに対してレジストリの設定を行う場合、現在は予め作成した REG ファイルを REGEDIT.EXE を使って実行するログオンスクリプトを使うことにより行っています。 しかし Windows NT では REGEDT32.EXE が正式なサポート対象であるので、 REGEDIT.EXE を使うのは問題ではないかという指摘を受けました。
REGEDIT.EXE も同梱されている以上使って良いと考えているのですが、どうなっているのでしょうか。

回答

結論から申しますと、一部機能に制限はあるものの REGEDIT.EXE を使用することは可能です。また一部 REGEDIT.EXE でないと簡単に実現できない機能も存在します。 ところが書籍などでは REGEDT32.EXE しか紹介していないものも多く、 Windows 95 と同様の GUI を備えた REGEDIT.EXE のことは意外とご存じない方も多いようです。
これは Windows NT のレジストリエディタはあくまで REGEDT32.EXE であり, Windows NT のレジストリが備えるすべての機能を扱うには REGEDT32.EXE を使う必要があるためです。
両者の違いについては, マイクロソフト社の以下の技術情報にも記述がありますので、一読することを勧めます。

JP155267: [NT] Windows NT 4.0 にインストールされるレジストリエディタ http://support.microsoft.com/default.aspx?scid=kb;ja;JP155267

しかし GUI を見比べれば一目瞭然ですが, REGEDT32.EXE は古めかしい GUI(図1)なのに対し、 REGEDIT.EXE(図2) はエクスプローラ風のツリービューを備え、レジストリの値に対する検索機能を備えるなど、使い勝手もかなり向上しています。 また上記の技術情報にも、レジストリに編集を加える場合は REGEDT32.EXEを使用することを推奨するという記述はありますが、 REGEDIT.EXE で編集することを禁止はしていません。実際 REG_EXPAND_SZ 型や REG_MULTI_SZ 型のような特殊な型でない限り、 REGEDIT.EXE で編集しても問題が発生したという話は筆者も今まで聞いたことがありません。


図1: REGEDT32.EXE の GUI


図2: REGEDIT.EXE の GUI

従って、 REGEDIT.EXE でサポートしていない型のキーに対して書込まないように注意を払えば、日常的には REGEDIT.EXE を使用しても技術的には問題はないでしょう。 特にレジストリの値を参照するだけであれば REGEDIT.EXE の方が便利ですので、積極的に活用してみてはいかがでしょうか。
筆者もどうしても必要な場合以外は、日常 REGEDIT.EXE を使っています。

REGEDIT.EXE でできない自動化処理には REG.EXE を活用しよう

ところで, REGEDIT.EXE にできて, REGEDT32.EXE にできない機能の一つに、今回の質問にあったレジストリの自動設定機能があります。設定したいキーの型が REGEDIT.EXE で編集できる型であれば良いのですが, それ以外の型の場合は, REGEDIT.EXE は使えません。
実は .INF ファイルを作成することで、このような型のレジストリも自動で設定が可能です。たとえば、リスト1のような INF ファイルを作成し

%SystemRoot%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 [INF ファイルのフルパス] 

として実行することで, レジストリに値を書込むことができます。なおリスト1は大文字と小文字を区別しますので、入力の際は注意してください。
注意: すでにレジストリ中にこの名前を持つエントリがあった場合は, 上書きしてしまいますので, 実行する前には必ず同名のエントリがないことを確認してください。筆者は, このコマンドを実行したことによるいかなる損害についても保証できません。実験する際には充分注意して行ってください

リスト1

[Version]
Signature="$Windows NT$"

[DefaultInstall]
AddReg = MyAddReg

[MyAddReg]
HKLM,System\CurrentControlSet\Services\TEST\Parameters, TestMultiKey,     0x10000 , "test1", "test2"
HKLM,System\CurrentControlSet\Services\TEST\Parameters, TestBinaryKey,     0x00001 , 32,33,34

ただし, ここで 0x10000 に相当する値が REG_MULTI_SZ 型であることなどは,筆者が探した限りでは setupapi.h という C 言語のヘッダファイルを見ないとわかりませんでした。 各々の型を表す値の一覧については表1を参照してください。
そのほか文法については MSDN中にあるPlatformSDK\Management Services\Setup\Setup API\Overview\INF Files\INF File Format Reference 以下の Add Registry や Delete Registry 等に詳しい記述があります。ただし、これらは開発者向けの英文の情報ですので、一般の管理者にはかなり敷居が高いかと思います。

表1: レジストリの型と対応する値の一覧
REG_SZ 0x00000
REG_MULTI_SZ 0x10000
REG_EXPAND_SZ 0x20000
REG_BINARY 0x00001
REG_DWORD 0x10001
REG_NONE 0x20001

手軽にできる方法としては, REG.EXE (図3)を使用する方法があります。
REG.EXE は Windows NT 4.0 Resource Kit Support Tools という CD-ROM のリソースキットのサブセット中にあります。これは Windows NT のライセンスがあれば Windows NT 4.0 Resource Kit Suppor Tools のページからダウンロードして利用できます。


図3: REG.EXE add /? したときのコマンドプロンプト

INF ファイルの MyAddReg セクションの一行目と同じ操作は, 以下のようなコマンドで行えます。

  REG.EXE ADD HKLM\System\CurrentControlSet\Services\TEST\Parameters\TestMultiKey=test1;test2 REG_MULTI_SZ 

これらのコマンドを実行すると確認を行わずにレジストリを書き換えます。誤ってレジストリを変更すると, システムに致命的な影響をおよぼすこともありますので, 充分に実験を行ってから使用してください。

注記・補足

  1. Windows XP では、REGEDT32.EXE は REGEDIT.EXE に統合されました。
    この記事の内容が Windows XP でどのように変更されているかは確認していません。
  2. 本文書は、日経 Windows NT 1999 年 12 月号の「トラブル解決 Q&A コーナー」に掲載された「REGEDIT.EXEとREGEDT32.EXEの使い分け」の草稿を筆者の方で HTML 化して掲載しているものです。


Copyright (C) 1998-2009 TAKAHASHI, Motonobu
Last update: 2002-09-18 04:17:24 JST
webmaster@monyo.com