2013年8月6日火曜日

ソフトの格納先 x86(32bit) と x64(64bit)

またまた、msdn Forum ( Visual Basic ) で赤っ恥を晒してしまいましたね。 無知って怖いですね。
いつもの、勘違い を、また、やらかしてしまいました。 気をつけねば。
それは、既成のあるいは自作のソフトやアプリの格納先 Folder についてです。
64bit OS の場合、32bit のものは C:¥Program Files (x86) 、64bit(Native) のものは C:¥Program Files に収まっているものとず~と思っていました。


戒めの意味も含めて記載しておきましょう。
     Forum の元スレッドは Win7(32bit)上のVB2008(Pro)で作成したアプリをWin7(64bit)のPCで印刷させると位置がずれる  。
     この中の私の投稿とほぼ同じ内容です。 経緯や内容に興味のある方はご参照下さい。


基本的にはこの解釈でいいみたいですが ... 。 正確ではなかった ... 。

以下に、引用を含めて解説しますが、以下の引用全て、引用元は次のサイトです。
サイト中ほど 「64 bit アプリケーション」 の項 からの抜粋です。

  http://www.attosoft.info/trac/ticket/15

先ず、基本は。

WindowsApplication InstalledFolder Notice
32 bit 32 bit C:¥Program Files  
  64 bit  --- (インストール不可)
64 bit 32 bit C:¥Program Files (x86)  
  64 bit C:¥Program Files  

注:C: は環境依存の為、System.Environment.GetEnvironmentVariable("SystemDrive") で取得が安全。
尚、本表は ShiroYuki_Mot が記載内容を独自に再度表組みしています。 引用元の表とは異なります。
                  

但し、例外があります。
※インストーラーは基本的にはファイルのコピーやレジストリへの登録などを処理するだけなので、32 bit インストーラーでも 64 bit アプリケーションをインストールすることができる。ただしインストール先が​ファイルシステムリダイレクタによって 32 bit 用のフォルダにリダイレクトされるため、64 bit 用のフォルダにはインストールすることができない。64 bit アプリケーションを 64 bit 用のフォルダにインストールするには別途 64 bit インストーラーが必要となる。なお 64 bit アプリケーションが 32 bit 用のフォルダにある状態でもアプリケーションの動作に問題は生じない。

※ 64 bit Windows に用意されている 32/64 bit 用の フォルダは、アプリケーションを 32/64 bit のどちらで起動するかの判定には影響しない。32 bit 用のフォルダにある 64 bit アプリケーションは 64 bit で起動し、64 bit 用のフォルダにある 32 bit アプリケーションは 32 bit で起動する。アプリケーションを 32/64 bit のどちらで起動するかは PE ヘッダー内の 32BIT フラグによって決定される。


 つまり、64bit OS の場合、必ずしも、ソフトやアプリの種類に応じて、Program File の Folder を棲み分けている訳ではない、と。
Installer 次第ですよ、と。
C:¥Program Files (x86) に収まっていても 64 bit 用のものである場合もあるよ、って事。
逆も有。
な~んか、ややこしい ですね。

でも、使う側にとっては便利ですね、この仕組み。  とても、よく考えてあります。


それから、上記に示したサイトですが、64 bit / 32bit のアプリ・OS・ライブラリ絡み(プロセス)・環境変数・ファイルシステム・レジストリ そして Visual Studio まで、簡潔に纏めてあり、分り易い資料です。
作成・公開して戴いている方々に感謝します。
是非、興味のある方は、ご一読を。


個人的弁解。
私は VB2008SP1 ExpressEdition 版の利用者なので、インストローラーの挙動を知りませんでした。
インストローラーに 32 bit  用 64 bit  用と2種類あるのって、こういう理由だったのですね。
インストローラーは EE 版では作れないのです。 ClickOnce 発行のみ。
出来上がるソフトも AnyCPU 固定です。 x86 指定すら出来ません。
また、殆どが個人利用ですし、各 PC には開発環境がある為、外部ライブラリ(x64)の存在を留意するだけで過ごして来ました。
いや~、msdn に投稿したお陰で、勉強になりました。

関係者の方々へ。  スレッドを汚してしまって申し訳ありませんでした。 ご勘弁下さい。



[2013/08/06] 元スレッドのリンクを記載
[2013/08/12] 誤字訂正 ClickOnce

0 件のコメント:

コメントを投稿