none
システム(64ビット)フォルダはSysWow64ですか? RRS feed

  • 質問

  • VS2005でセットアッププロジェクトを作成しています。

    インストールしたいアプリは32bitでインストール先は64bitOSです

    この場合、32bitのDLLをSysWow64に入れるのはわかったのですが

    セットアッププロジェクトの作成時に対象OSを64bitとして

    ファイルの種類でシステムフォルダを設定するときに

    システム(64ビット)フォルダは

    64bitOSの中のSystem32を指すのか

    SysWow64を指すのか教えていただけますか?

    どこかでシステムフォルダを選択すると

    そのOSの基本システムフォルダを指すように

    書かれていたので迷ってきました。

    よろしくお願いします


    2012年8月23日 2:37

回答

  • いろいろと質問される前に 64bit Windows における 32bit Application の挙動についてきちんと勉強してください。

    http://msdn.microsoft.com/ja-jp/library/aa384187(v=vs.85) など。
    ここからリンクでたどれる先もいろいろと見てください。

    // 個人的には、32bit Application のインストールに 64bit Installer を作る理由がわかりませんが…。
    2012年8月23日 13:01
    モデレータ
  • 64bitOSのシステムファイルを参照したいので
    どちらのシステムフォルダを選択するのかを知りたかったのです。

    なぜですか?

    先に書かれているような、32bit Application 向けの共通コンポーネントのインストールのためなら、64bit Process 向けのシステムフォルダーを知る必要はないかと思いますが…。
    64bit Windows が登場する前の 32bit Application の Installer は、64bit Windows のシステムフォルダーを知りませんよね?それでも、ある程度問題なく動くように設計されていますよ。
    その辺は環境変数なり、取得されるフォルダーなりが工夫されているわけです。

    何も考えずに 32bit Installer を作れば、64bit Windows では 32bit Application 向けのシステムフォルダーが取得されるはずです。

    2012年8月23日 21:42
    モデレータ
  • もしかしてVS2005で作成したアプリがAny CPUになっていて、32bit OS上では32bitアプリとして、64bit OS上では64bitアプリとして動作していたりしませんよね? その場合、VB6.0のDLLは32bit DLLなので、64bitアプリからは読み込むことができません。

    この仮定通りの場合の解決策は、Any CPUではなく明示的に32bitにすることです。こうすることで64bit OS上でも32bitアプリとして動作し、VB6.0の32bit DLLを読み込むことができるようになります。また当然のことながら、インストーラーも32bitアプリで実装する必要があります。

    • 回答の候補に設定 山本春海 2012年8月24日 5:14
    • 回答としてマーク 山本春海 2012年8月27日 7:45
    2012年8月23日 21:55
  • 先に書かれているような、32bit Application 向けの共通コンポーネントのインストールのためなら、64bit Process 向けのシステムフォルダーを知る必要はないかと思いますが…。

    何も考えずに 32bit Installer を作れば、64bit Windows では 32bit Application 向けのシステムフォルダーが取得されるはずです。

    おはようございます。

    返信、ありがとうございます。

    理解できたように思います。

    64bitOS上だから32bitアプリ独自で必要なものは

    32Bitフォルダだけど他の共通システムとしては

    64Bitフォルダのファイルを参照すると思ってました。

    ありがとうございました

    2012年8月23日 23:51
  • もしかしてVS2005で作成したアプリがAny CPUになっていて、32bit OS上では32bitアプリとして、64bit OS上では64bitアプリとして動作していたりしませんよね? その場合、VB6.0のDLLは32bit DLLなので、64bitアプリからは読み込むことができません。

    この仮定通りの場合の解決策は、Any CPUではなく明示的に32bitにすることです。こうすることで64bit OS上でも32bitアプリとして動作し、VB6.0の32bit DLLを読み込むことができるようになります。また当然のことながら、インストーラーも32bitアプリで実装する必要があります。

    おはようございます。

    返信、ありがとうございます。

    アプリはVB6で作成しているので32bitです。

    セットアッププロジェクトの構成マネージャーのプラットフォームはDefaultになっていて変更できません。

    プロパティのターゲットプラットフォームはx86にしています。

    すこしづつでも勉強して理解していきます。

    お手数をおかけしてすみませんでした。

    ありがとうございました。

    2012年8月24日 0:37

すべての返信

  • そもそも \Windows 配下のファイルを直接操作することが推奨されていません。設計を見直してください。
    2012年8月23日 3:42
  • 返信ありがとうございます

    システムフォルダへの操作ができないとなると

    今までsystem32に入れていたDLLやOCXはどのようにされてますか?

    別のアプリの再配布ファイルなので

    別の場所への設定はできないと思うのですが・・・

    また、ランタイムの別途インストールは考えてません

    (必要ファイルのみ設定したい)

    再度、ご教示をお願いします


    2012年8月23日 4:22
  • それはDLLやOCXそれぞれの再頒布方法を参照してください。
    2012年8月23日 5:03
  • 返信、ありがとうございます。

    先の質問に追記です。

    インストールしたいEXEはVB6.0で開発しコンパイルしたものです。

    システムファイルをシステムフォルダ以外からどう参照するかは

    別途考えてみます。

    で、掲題の件ですが

    既存のシステムファイルを参照する場合において

    64bitOSにインストールする場合には

    セットアッププロジェクトにおける

    システムフォルダ(64ビット)は¥Windows¥SYSTEM32を指し

    (また、システムフォルダ=SysWow64?は32bitDllを参照する場合)でよいですか?





    2012年8月23日 7:45
  • いろいろと質問される前に 64bit Windows における 32bit Application の挙動についてきちんと勉強してください。

    http://msdn.microsoft.com/ja-jp/library/aa384187(v=vs.85) など。
    ここからリンクでたどれる先もいろいろと見てください。

    // 個人的には、32bit Application のインストールに 64bit Installer を作る理由がわかりませんが…。
    2012年8月23日 13:01
    モデレータ
  • いろいろと質問される前に 64bit Windows における 32bit Application の挙動についてきちんと勉強してください。

    http://msdn.microsoft.com/ja-jp/library/aa384187(v=vs.85) など。
    ここからリンクでたどれる先もいろいろと見てください。

    // 個人的には、32bit Application のインストールに 64bit Installer を作る理由がわかりませんが…。

    返信、ありがとうございます。

    ご指摘の通り、勉強不足は十分に痛感しております。

    また説明不足も申し訳ありません

    >// 個人的には、32bit Application のインストールに 64bit Installer を作る理由がわかりませんが…。

    64bitインストーラーを作りたいのではなく

    64bitOSのシステムファイルを参照したいので

    どちらのシステムフォルダを選択するのかを知りたかったのです。

    参考サイトを見るをみて再度勉強します

    ありがとうございました


    2012年8月23日 13:51
  • 64bitOSのシステムファイルを参照したいので
    どちらのシステムフォルダを選択するのかを知りたかったのです。

    なぜですか?

    先に書かれているような、32bit Application 向けの共通コンポーネントのインストールのためなら、64bit Process 向けのシステムフォルダーを知る必要はないかと思いますが…。
    64bit Windows が登場する前の 32bit Application の Installer は、64bit Windows のシステムフォルダーを知りませんよね?それでも、ある程度問題なく動くように設計されていますよ。
    その辺は環境変数なり、取得されるフォルダーなりが工夫されているわけです。

    何も考えずに 32bit Installer を作れば、64bit Windows では 32bit Application 向けのシステムフォルダーが取得されるはずです。

    2012年8月23日 21:42
    モデレータ
  • もしかしてVS2005で作成したアプリがAny CPUになっていて、32bit OS上では32bitアプリとして、64bit OS上では64bitアプリとして動作していたりしませんよね? その場合、VB6.0のDLLは32bit DLLなので、64bitアプリからは読み込むことができません。

    この仮定通りの場合の解決策は、Any CPUではなく明示的に32bitにすることです。こうすることで64bit OS上でも32bitアプリとして動作し、VB6.0の32bit DLLを読み込むことができるようになります。また当然のことながら、インストーラーも32bitアプリで実装する必要があります。

    • 回答の候補に設定 山本春海 2012年8月24日 5:14
    • 回答としてマーク 山本春海 2012年8月27日 7:45
    2012年8月23日 21:55
  • 先に書かれているような、32bit Application 向けの共通コンポーネントのインストールのためなら、64bit Process 向けのシステムフォルダーを知る必要はないかと思いますが…。

    何も考えずに 32bit Installer を作れば、64bit Windows では 32bit Application 向けのシステムフォルダーが取得されるはずです。

    おはようございます。

    返信、ありがとうございます。

    理解できたように思います。

    64bitOS上だから32bitアプリ独自で必要なものは

    32Bitフォルダだけど他の共通システムとしては

    64Bitフォルダのファイルを参照すると思ってました。

    ありがとうございました

    2012年8月23日 23:51
  • もしかしてVS2005で作成したアプリがAny CPUになっていて、32bit OS上では32bitアプリとして、64bit OS上では64bitアプリとして動作していたりしませんよね? その場合、VB6.0のDLLは32bit DLLなので、64bitアプリからは読み込むことができません。

    この仮定通りの場合の解決策は、Any CPUではなく明示的に32bitにすることです。こうすることで64bit OS上でも32bitアプリとして動作し、VB6.0の32bit DLLを読み込むことができるようになります。また当然のことながら、インストーラーも32bitアプリで実装する必要があります。

    おはようございます。

    返信、ありがとうございます。

    アプリはVB6で作成しているので32bitです。

    セットアッププロジェクトの構成マネージャーのプラットフォームはDefaultになっていて変更できません。

    プロパティのターゲットプラットフォームはx86にしています。

    すこしづつでも勉強して理解していきます。

    お手数をおかけしてすみませんでした。

    ありがとうございました。

    2012年8月24日 0:37