「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>64bit対応]]
-戻る
--[[64bit対応]]
--[[Windows OSの基礎的トピック]]

* 目次 [#q793ef6e]
#contents

*概要 [#eb2460b4]
WOW64についての情報を纏めている。

*プログラム開発 [#u7f970c8]

**64bitかWOW64(32bit)かを見分ける [#t5f448a9]

***[[.NET>.NET開発]] [#y5c167da]

-参考
--アプリケーションが64ビットで動いているか調べる、~
OSが64ビットか調べる - .NET Tips (VB.NET,C#...)~
https://dobon.net/vb/dotnet/system/is64bit.html

***[[VC++]] [#ae921db3]

-参考
--32ビットの実行モジュールが64ビットWindowsで動いているか判定する - 銀の弾丸~
https://takamints.hatenablog.jp/entry/2015/02/11/111714

***タスクマネージャ等 [#x323f55b]
名前の後ろに

-*32とか
-(32 ビット)とか

表示される。

**システムファイル、レジストリのリダイレクト [#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

***ファイルシステム・リダイレクター [#d5f3d5b4]

-ファイルシステムリダイレクター (Windows)~
http://msdn.microsoft.com/ja-jp/library/aa384187.aspx

***リダイレクトされないフォルダ [#ca414606]
Program Files のフォルダの場合は少々勝手が違ってきます。

-.NETでは
-[[.NET>.NET開発]]では

--[System.Environment.SpecialFolder.ProgramFiles]のようにフォルダ情報を取得すると、~
返ってくるのは、[%systemdrive%\Program Files (x86)]フォルダになります。~

--また、[%systemdrive%\Program Files]フォルダに対してファイルの作成などを~
おこなってもリダイレクトはされず、そのままそのフォルダに I/O がおこなわれます。

-VC++では
-[[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が取得されます。
---SHGetFolderPathA function (shlobj_core.h) - Win32 apps | Microsoft Docs~
https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetfolderpatha
---SHGetKnownFolderPath function (shlobj_core.h) - Win32 apps | Microsoft Docs~
https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath

---SHGetFolderPath function (Windows)~
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181.aspx
***リダイレクタが問題になるケース [#pdd723e0]
-32bitアプリケーションから64bitコマンドを実行する場合、~
逆に、リダイレクタが問題になる(通常、32bitコマンドを参照するため)。

**64bitかWOW64(32bit)かを見分ける [#t5f448a9]
必要であれば、IsWow64Process 関数を使用する。
-この様なケースでは、
--%windir%\System32 ディレクトリの代わりに 
--%windir%\Sysnative ディレクトリを指定する。

-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
-事例を見ると、[[シェル]]・[[スクリプト>スクリプティング]]で発生することが多い模様。~
(自作アプリだと、自アプリのTarget CPUや、パス環境変数、~
カレント・ディレクトリからの相対パスなどを気にするので)

-参考
--Windowsのファイルシステムリダイレクタにハマった話 - 西尾泰和のはてなダイアリー~
https://nishiohirokazu.hatenadiary.org/entry/20150220/1424413124
--64bit Windows 上で 32bit アプリケーションから~
64bit アプリケーションを実行する方法 - 日記のような何か~
https://learnin.hatenablog.com/entry/20110424/p1

*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
-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]]を参照。

*データプロバイダ [#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)。

*その他 [#x6f48228]
**[[コード・アクセス・セキュリティ]] ポリシーの設定 [#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開発]]
Tags: [[:Windows]], [[:移行]], [[:.NET開発]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS