不具合?仕様?No.03159
ぐり さん 12/06/11 20:46
 
続けての質問申し訳ありません。

Windows7の64bit版で秀丸ファイラーClassic32bit版を使用していますが
レジストリファイルの書き込みについて質問です。

HKEY_CURRENT_USERに書き込むファイルは問題ないですが、HKEY_LOCAL_MACHINEに書
き込むレジストリは秀丸ファイラーClassic上から書き込むとHKEY_LOCAL_MACHINE\SO
FTWARE\Wow6432Nodeの方に登録されます。

この状態でアプリケーションを起動するとレジストリを参照してくれないようです。
OS標準のエクスプローラからレジストリを書き込むと、正しくHKEY_LOCAL_MACHINEの
方に書き込まれました。

これって32bit版を使っているからの仕様なんでしょうか?64bitを使えば政情になり
ますか?

また、このことに気づいてアプリケーションのインストールを秀丸ファイラーClassi
c上から
行ってもよいのかどうか心配になってきました。
こちらもあわせて教えてください。

[ ]
RE:03159 不具合?仕様?No.03161
秀丸担当 さん 12/06/12 10:52
 

>HKEY_CURRENT_USERに書き込むファイルは問題ないですが、HKEY_LOCAL_MACHINEに書
>き込むレジストリは秀丸ファイラーClassic上から書き込むとHKEY_LOCAL_MACHINE\SO
>FTWARE\Wow6432Nodeの方に登録されます。

秀丸ファイラーClassicから書き込むというのが具体的にどういう操作かわから
ないですが、何かシェル拡張のDLLをご自身で作成されていて、秀丸ファイラー
Classicを管理者として起動して、シェル拡張のDLLの中で書き込む操作を行われ
ているということでしょうか。

Windows 64bit版上の32bitアプリケーションでは、コンテキストメニュー拡張な
ど、各種シェル拡張はWow6432Nodeのほうを参照してDLLのありかを見つけ、
32bit版のシェル拡張が動きます。

秀丸ファイラーClassicの仕組みというより、Windowsそのものの仕組みで、
32bitアプリケーションではそうなります。
64bit版の秀丸ファイラーClassicでは各種シェル拡張はWow6432Noteは参照しな
いです。(秀丸ファイラーClassicが意図して参照先を変えているわけではない
です)

インストーラなど、外部のEXEファイルは64bit版のEXEであれば64bit、32bit版
のEXEであれば32bit、.NETでAnyCPUであればOSによって自動的に64bitとなるの
で、外部のEXEを実行するぶんには32bit版を使っていても大丈夫だと思います。

[ ]
RE:03161 不具合?仕様?No.03164
ぐり さん 12/06/12 21:21
 
ありがとうございます。
こちらも64bit版を試してみて正常に書き込めるのを確認しました。

レジストリを書き込むというのは、ゲームなどの設定やセーブデータを以前のXP環境
からバックアップしていたのですがそれを書き込む際に
質問のような症状になり、設定が反映されてなかったので違う場所(Wow6432Node)に
書き込まれていたのに気づきました。

私自身はプログラム能力はありませんが、32bit版のシェル拡張機能を使いたいがために
32bit版秀丸ファイラーを使用してました。
ですがやはりそれには目を瞑り、64bit環境に合わせて使ってみたいと思います。

また些細なことですが、ドライブのアイコンなどの変更が32bit版では反映されてな
かったのが
64bit版ではちゃんと反映されていたことにも感動しました。

もうしばらく試用させていただき、正式登録を考えさせてもらいます。
今回はありがとうございました。

[ ]
RE:03164 不具合?仕様?No.03166
秀丸担当 さん 12/06/13 09:44
 

>レジストリを書き込むというのは、ゲームなどの設定やセーブデータを以前のXP環境
>からバックアップしていたのですがそれを書き込む際に
>質問のような症状になり、設定が反映されてなかったので違う場所(Wow6432Node)に
>書き込まれていたのに気づきました。

言われている状況がわかりました。
.regファイルにレジストリがバックアップされていて、それをダブルクリックし
て復元しようとしたということかと思います。

通常、EXEファイルの実行や、拡張子に関連付けられたプログラムの実行は、
64bit Windows上の32bitアプリケーションからの起動であっても、64bit版のEXE
であれば64bit版が実行されて、多くの場合は問題無いはずです。

しかし、.regに関連付けられているレジストリエディタ(regedit.exe)は、
C:\Windows\System32 フォルダにあるプログラムで、この場合は差異があるよう
です。
これは秀丸ファイラーだけでなく32bitアプリケーション全般に言えることです
が、32bitアプリケーションはSystem32にアクセスすると、実際にはSysWow64に
リダイレクトされるので、32bit版のregedit.exeが起動することになります。
そのため、.regのダブルクリックでは32bit環境としてレジストリ復元が行われ
ることにになるようです。


32bit環境としてレジストリ復元が行われることが妥当かどうかというのは、レ
ジストリの内容によると思います。
レジストリのWow6432Nodeにリダイレクトされる最大の理由は、CLSID等を通じて
最終的に32bit版のDLLファイルへのフルパスが直接記述されているためだと思い
ます。
ここに書かれている内容は、普通はプログラムのインストールによって行われる
べきもので、他のPCから.regファイルを通じて復元するものではないと思います。
普通であれば、ここにはゲームの設定などは含まれていないはずだと思います。

例えば、XPでCLSIDの中に "C:\32bitSoft\32bit.dll" のパスが直接記述されて
いて、それをWindows7/64bitで復元したら、"C:\32bitSoft\32bit.dll"はどこに
復元されるのが適切かというと、どちらかというと、Wow6432Nodeに復元される
のが適切です。
というか C:\32bitSoft\32bit.dll が存在しなければ復元しても意味が無いので、
ここはプログラムのインストールによって作られるべき情報です。
これを今回試された、64bit環境の中に"C:\32bitSoft\32bit.dll"が復元されて
しまうと、64bit環境から32bit DLLをロードしようとする結果になるので、良く
ないです。

ゲームの設定などはたぶんHKEY_CURRENT_USER配下などの別の場所にあると思い
ます。

[ ]