こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

32ビットのアプリで、64ビットOSのシステムフォルダ先のiniファイルを読み込むには

お世話になります。
C#2005で開発しております。

WinXPで作成したexeで、C:\Windows\System32の下のiniファイルを読み込んでおります。
このexeを64bit版Win2008Serverで実行したいのですが、
C:\Windows\SysWOW64にインストーラーで作成されたiniファイルを以下のコードで読み込むことが出来ません。

string strIniFilePath = Environment.SystemDirectory + "\\****.INI";

64bit版で32ビットのものを実行する場合は、C:\Windows\SysWOW64に読み込みをしなければならないと認識しております。
また、64bit版Win2008Serverのsystem32フォルダに置くと、読み込むことが出来ます。
iniファイルはdllと違い、system32の下に置かなければいけないのでしょうか。

お手数ですが、ご教授いただきたくお願い申し上げます。

投稿日時 - 2009-12-10 01:41:00

QNo.5511217

すぐに回答ほしいです

質問者が選んだベストアンサー

http://itpro.nikkeibp.co.jp/article/COLUMN/20051121/224935/

「そこで64ビットWindows(WOW64)は,32ビット・アプリケーションが,例えばC:\WINDOWS\system32にアクセスすると,C:\WINDOWS\SysWOW64にリダイレクトする(図14[拡大表示])。」
と言うのが重要。

つまり
・32ビットアプリケーションは、インストーラーにより、C:\Windows\SysWOW64にインストールしなければならない
・32ビットアプリケーションをC:\Windows\System32にインストールしてはならない(iniファイルも然り。C:\Windows\System32に32ビット用iniファイルを置いてはならない)
・32ビットアプリケーションは、C:\Windows\SysWOW64にアクセスする場合は、C:\Windows\System32にアクセスし、WOW64によってリダイレクトして貰わねばならない
・32ビットアプリケーションは、C:\Windows\SysWOW64にアクセスするようなハードコーディングをしてはならない
って事です。

なお、
string strIniFilePath = System.Environment.GetFolderPath(Environment.SpecialFolder.System) + "\\****.INI";
の方が安全です。

投稿日時 - 2009-12-10 02:12:10

補足

ご回答ありがとうございます。
私も上記のページを確認し、記述していただいたコードも試したのですが、C:\Windows\SysWOW64のiniファイルを読み込むことが出来ませんでした。
リダイレクトをしているかどうか確認できるコードはあるのでしょうか。

投稿日時 - 2009-12-10 03:17:19

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

C# 2005の初期設定では
プラットフォームターゲットがAny CPUになっているので、
x86環境ではx86アプリケーションとして
x64環境ではx64アプリケーションとして動作します。


なので、あなたが32ビットだと思っているプリケーションは
実際にはx64アプリケーションとして動作しているのでしょう。

x86/x64のどちらで動作しているかは
タスクマネージャのプロセスタブでイメージ名に *32 がついているかどうかを
確認することで分かります。


10 行でズバリ !! 64 ビット対応 .NET アプリケーションの開発 (C#)
http://msdn.microsoft.com/ja-jp/events/dd279507.aspx

投稿日時 - 2009-12-10 21:09:25

あなたにオススメの質問