「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>64bit対応]] * 目次 [#q793ef6e] #contents *概要 [#eb2460b4] WOW64についての情報を纏めている。 *プログラム上の注意点 [#u7f970c8] **システムファイル、レジストリのリダイレクト [#qf5b120e] -32 bit アプリケーションを 64 bit 環境 (WOW64) に移植する際の~ システムファイル - レジストリの扱いについて - 松崎 剛 Blog - Site Home - MSDN Blogs~ http://blogs.msdn.com/b/tsmatsuz/archive/2009/04/17/64-bit-wow-32bit-system-file-registry.aspx ***ファイルシステムリ・ダイレクター [#d5f3d5b4] -ファイルシステムリダイレクター (Windows)~ http://msdn.microsoft.com/ja-jp/library/aa384187.aspx ***レジストリ・リダイレクター [#cc322f34] -レジストリ リダイレクタ (Windows)~ http://msdn.microsoft.com/ja-jp/library/aa384232.aspx ***リダイレクトされないフォルダ [#ca414606] Program Files のフォルダの場合は少々勝手が違ってきます。 -.NETでは --[System.Environment.SpecialFolder.ProgramFiles]のようにフォルダ情報を取得すると、~ 返ってくるのは、[%systemdrive%\Program Files (x86)]フォルダになります。~ --また、[%systemdrive%\Program Files]フォルダに対してファイルの作成などを~ おこなってもリダイレクトはされず、そのままそのフォルダに I/O がおこなわれます。 -VC++では --x64OS上でWOW64アプリからSHGetFolderPath()~ を使用してProgram Filesのパスを取得できない?~ http://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/thread/f47738f7-bf13-42f3-8945-5762f5dc7d5e/ WOW64で動作しているアプリでSHGetFolderPath()APIを使用し、 CSIDL_PROGRAM_FILES_COMMONを指定しています。 すると、Program Files\Common Filesではなく、 Program Files (x86)\Common Filesが取得されます。 ---SHGetFolderPath function (Windows)~ http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181.aspx **64bitかWOW64(32bit)かを見分ける [#t5f448a9] -Windows 64-32 bit OS を判別する方法 - ソフトウエア開発の備忘録~ http://d.hatena.ne.jp/ash39/20110708/1310135805 --IsWow64Process function (Windows)~ http://msdn.microsoft.com/en-us/library/windows/desktop/ms684139.aspx *COM [#rfe01ad0] **登録 [#uad1ab2b] 開発したCOMを登録するRegsvr32にも32版64版があります。 - 64 ビット版は %systemroot%\System32\regsvr32.exe です。 - 32 ビット版は %systemroot%\SysWoW64\regsvr32.exe です。 参照URL: http://support.microsoft.com/kb/249873/ja cf. Windows7 64bit にdllを登録する方法~ 【ダッシュ】熊本のSEO対策・ホームページ制作会社です http://www.dashinc.co.jp/archives/1662 **DCOM [#ha2d2fa7] COMの設定を行うdcomcnfg.exeにも32bit版があるもよう。 dcomcnfg.exe /32 -参考 --[Windows]64bit版Windowsでx32bit版のDCOMが表示されない - MOMOYA.Labs -- 桃屋ラボ~ http://momoya.me.land.to/?pid=134 --GeekなぺーじDCOM(分散COM)を無効にする~ http://www.geekpage.jp/practical/winxp-tips/dcomcnfg.php --[CS]HOWTODcomcnfg.exe を使用してアクセス セキュリティを設定する方法~ https://support.microsoft.com/ja-jp/kb/328522 **COMクライアント [#s4e0b4c2] ***VBS [#sf712acb] - 32ビット版のCScriptコマンドを使ってVBScriptのプログラムを実行するには、 CScriptコマンドを「C:\Windows\SysWOW64\CScript.exe」と記述します。 cf. 6.64ビット環境でVBScriptを実行する方法 - CWindowsSysWOW64CScript - VBScript & JScript基礎 http://www.happy2-island.com/vbs/cafe01/capter00600.shtml ***Office VBA [#p625d44b] -Officeは64bitOS上でも32bitを使用した方が良い(実績的に)。~ 64bitのOfficeを採用する場合は色々調査・検証が必要になる。 ***ASP [#e767cc19] [[コチラ>64bit対応#u221e8e8]]を参照。 *32bit用、64bit用データプロバイダに起因する問題 [#n7742752] ここでは、32bit用、64bit用データプロバイダに起因する問題をまとめています。~ [[ADO.NETデータプロバイダ]]一般的なトピックは[[コチラ>ADO.NETデータプロバイダ]]を参照下さい。 -ドライバはWOW64上で動作しないため64bitプラットフォームでは64bit対応~ されたものを使用する必要があるのですが、ODBC、OLEDBドライバなどは所謂ドライバ~ (デバイス・ドライバ、バス・ドライバ、フィルタ・ドライバ)とは異なるため、~ WOW64上でも使用可能ですが、詳細は其々サポート状況を確認が必要です。 -各プラットフォーム(32bit or 64bit + 対象データソース)の~ サポートのあるODBC、OLEDBドライバなどが用意されているか確認が必要です。 **ODP.NET [#x8197aae] ***組合 [#x71fc4a5] -ODP.NETのDLL(Oracle.DataAccess.dll)は32/64bit決め打ちで、anyCPUになっていないので、~ クライアントプログラムのターゲット(32/64bit)に一致したものをインストールする必要がある。 -警告(warning)は、~ 上位プログラムがanyCPU、下位プログラムが32/64bit決め打ちの場合に出力される。~ Visual Studio・MSbuildの設定(=*.cs or vbproj、*.slnファイル)が合っていれば問題はない。 ***インストール [#e41cc75e] -64bit環境で、DBMSが同居しており、クライアントがWOW64で32bitの場合、~ Oracleクライアント32bitをインストールする必要がある。 -最近マネージドのOracleクライアント不要のODP.NETがリリースされたようですので、~ こちらを使用すれば簡単かもしれません。詳しくは[[コチラ>ADO.NETデータプロバイダ#j939b851]]を参考にして下さい。 **ODBC [#u4f9b72d] Windows 7(64bit) / Office 2010(32bit) 環境での検証結果 -64bit の ODBCアドミニストレータ(※1)の[ユーザDSNタブ]でExcel Filesを選択したところ~ エラーとなり、追加ボタンで追加できるドライバーの一覧でも Excel はありませんでしたので、~ この構成の場合32bit のExcel Files ODBC ドライバのみが追加されるもようです。~ -32bit の ODBCアドミニストレータ(※2)の[ユーザDSN]タブではExcel Files を選択できる。~ ※1:C:\Windows\System32\odbcad32.exe~ ※2:C:\Windows\SysWOW64\odbcad32.exe~ **OLEDB [#d77a2164] なお、OLEDBについては、2008R2 64bit上で32bit、64bitの両方の~ Jet OLE DB プロバイダが存在し、それぞれ動作したことを確認しています。 問題は、OLEDBが64ビットに対応していない件ですが、以下の代替のドライバがあり、~ これをインストールしてConnectStringを変更することにより、プログラム変更なく動作しました。 -Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント --AccessDatabaseEngine_X64.exe~ http://www.microsoft.com/en-us/download/details.aspx?id=13255 -参考 --Microsoft,jet,OLEDB,4.0 - マイクロソフト コミュニティ~ http://answers.microsoft.com/ja-jp/windows/forum/windows_7-windows_programs/microsoftjetoledb40/88ba7315-9c05-43cb-9d22-2bd5f59f3450?msgId=3165281a-fd76-4217-8d83-0fabc83b737e ---ConnectionString プロパティのプロバイダ引数を、~ "Microsoft.ACE.OLEDB.12.0"に設定する必要がある。 --64 ビット環境での各種データ アクセス サポート エンジニアからのアドバイス~ http://msdn.microsoft.com/ja-jp/data/gg607264.aspx **OO4O [#v281156a] -OO4Oは[[discon>ADO.NETデータプロバイダ#n1995e2c]]で、64bit対応がされていないようです。 -また、ODAC 11.2.0.3.0でWindows Server 2008 R2がサポートされているように見えますが、~ --ODAC 11.2.0.3.0 Install Instructions~ http://www.oracle.com/technetwork/topics/dotnet/downloads/install112030-1440546.html >実際は、WOW64環境もサポートされていないようです(Windows Server 2008 R2以降への以降はNG)。 *コード アクセス セキュリティ ポリシーの設定 [#xd1d3f0f] こちらにも同様に32bit設定と64bit設定があるようです。~ ホストするアプリが32bitの場合、対象アプリが64bitでも、~ 32bitのコード アクセス セキュリティ ポリシー設定を参照するようです。 IE9(32bit) → Excel2010(64bit) → DLL(64bit) といった動作をする場合、 実行するプロセスは 64bit だが、CAS 設定は IE9 から、32bit のものを参照している。 *参考情報 [#y4ed1f95] -WOW64 - Wikipedia~ http://ja.wikipedia.org/wiki/WOW64 -Win32アプリケーションを実行するWOW64 - @IT~ http://www.atmarkit.co.jp/fwin2k/special/win64_02/win64_02_01.html -WOW64 実装の詳細 (Windows)~ http://msdn.microsoft.com/ja-jp/library/aa384274.aspx ---- Tags: [[:移行]], [[:.NET開発]]