none
Windows7の共有DLLインストール先について RRS feed

  • 質問

  • 開発環境:

    Windows XP SP3

    VC++ 6.0 MFC


    はじめまして。

    Windows XP以前のOSで使用されていたアプリケーション(VC++ 6.0 MFCで開発)を

    Windows7上でも使用できるようプログラムやインストーラの修正対応を行っているのですが、

    共有DLLファイルのインストール先について不明点があります。



    アプリケーションのWindows7対応をするにあたって下記のサイトからダウンロードできる

    Windows7 Client Software LogoというPDF文書を参考にしました。

    (Windows7 ソフトウェアロゴ要件 日本語抄訳版)

    http://www.microsoft.com/japan/isv/innovateon/win7/testing.mspx

    その文書内に示されているWindows7 の技術要件で、

    P9

    「2 既定で正しいフォルダにインストールする」

    内に

    「Windowsディレクトリおよびサブディレクトリに直接書き込まないようにします。

    フォントやドライバーなどのファイルは正しい方法でインストールします。」

    という要件があります。

    これはWindows7の場合Windowsフォルダ以下にファイルを書き込んではいけないという

    ことだと思ったのですが、修正対象のアプリケーションはインストール時にWindowsフォルダ下の

    System32フォルダに共有DLLファイルをインストールしています。

    Windows7ではこうした共有DLLファイルはどこにインストールするべきなのでしょうか。

    Windows7のSystem32フォルダ(64ビット版Windows7の場合はSysWow64フォルダ)に

    共有DLLファイルをインストールした場合でも、インストール動作やアプリケーションの動作自体に

    不具合は発生しないのですが、正しい対処法が存在するならなるべくその方法に準拠したいと考えています。

    よろしくお願い致します。

    2011年5月10日 7:59

回答

  • >Windows7ではこうした共有DLLファイルはどこにインストールするべきなのでしょうか。

    インストール単位が異なるアプリケーション間では、DLL を共有しないのが正しいです。

    Program Files 配下に Common Files なんてフォルダもありますが、強く利用を推奨している文書は見かけたことがありません。

    >Windows7のSystem32フォルダ(64ビット版Windows7の場合はSysWow64フォルダ)に
    >共有DLLファイルをインストールした場合でも、インストール動作やアプリケーションの動作自体に
    >不具合は発生しないのですが

    互換性の維持のため、現状は動作する場合が多いと思います。

    ですが、UAC 導入で大ゴケしたアプリケーションも多数あったわけで、ああいう感じでいつか、Windows OS のバージョンアップに伴って動作しなくなる日が来ると考えておくべきと思います。

    • 回答としてマーク 山本春海 2011年5月24日 9:01
    2011年5月10日 10:29
  • yuuki1947さんの仰っている"共有DLLファイル"というのは、どこまでの範囲なのかがわからないのですが
    ソフトウェア ロゴ要件では、以下のように決まっています。

    A) side-by-sideではない場合

    1) ファイルを複数のソフトウェア会社で使用する

    System ディレクトリに配置して、バージョンの下位互換性を保証する

    2) 1 社だけで使用する(1社内の複数製品間で共有に使用する)

    配置場所は

    CSIDL_PROGRAM_FILES_COMMON
    CSIDL_PROGRAM_FILES_COMMONX86
    http://msdn.microsoft.com/ja-jp/library/bb762494.aspx

    の下に会社名や製品名のサブフォルダーを作成して配置します。

    (会社内での決め事)
    ・バージョン管理(下位互換性)
    ・どの製品がインストールするのか

    B) side-by-sideの場合

    これは、とても面倒ですが、VC++のランタイムのようにside-by-side DLLにして
    デジタル署名、マニフェストと共に厳密なバージョン管理をしてside-by-sideフォルダ 「C:\Windows\winsxs」に配置します。
    ...ですが、ほとんど見たことないですね。


    これらは、Windows 7対応でということではなく、以前から変わっていません。
    ロゴ取得を行わないにしても、可能な限り従うべきだと思います。

    なお、ロゴ取得の場合には、A)もデジタル署名が必須になります。


    ご参考に。


    • 編集済み artglass 2011年5月14日 17:57 インデントを付けました
    • 回答としてマーク 山本春海 2011年5月24日 9:02
    2011年5月14日 17:56
  • Windows Logo Program の要件は、過去のOSからの積み重ねになっています。
    新 OS が加わると、それにより変更になった箇所の更新が行われるようになっています。

    今回の該当部分ですが、

    Designed for Windows XP Test Framework 1.1.1
    http://www.microsoft.com/downloads/en/details.aspx?FamilyId=2842ED69-68C2-468B-B324-9A5F6E054070&displaylang=en

    これをダウンロードして、展開すると「LogoTestFramework111.doc」というファイルがあります。
    ここに

    T2.6  Install any shared files that are not side-by-side to the correct locations

    という章があり、これが現状の Windows Logo Program でも生きています。

    一応、以下の URL にも

    http://msdn.microsoft.com/ja-jp/library/cc421992.aspx

    に日本語化されたものがあったりします。

    Windows Logo Program については、Microsoft Partner Network に登録して
    問い合わせをすると、かなり詳細に教えてくれますよ。

    • 回答としてマーク 山本春海 2011年5月24日 9:02
    2011年5月18日 5:29

すべての返信

  • >Windows7ではこうした共有DLLファイルはどこにインストールするべきなのでしょうか。

    インストール単位が異なるアプリケーション間では、DLL を共有しないのが正しいです。

    Program Files 配下に Common Files なんてフォルダもありますが、強く利用を推奨している文書は見かけたことがありません。

    >Windows7のSystem32フォルダ(64ビット版Windows7の場合はSysWow64フォルダ)に
    >共有DLLファイルをインストールした場合でも、インストール動作やアプリケーションの動作自体に
    >不具合は発生しないのですが

    互換性の維持のため、現状は動作する場合が多いと思います。

    ですが、UAC 導入で大ゴケしたアプリケーションも多数あったわけで、ああいう感じでいつか、Windows OS のバージョンアップに伴って動作しなくなる日が来ると考えておくべきと思います。

    • 回答としてマーク 山本春海 2011年5月24日 9:01
    2011年5月10日 10:29
  • 渋木宏明 様


    返信が遅くなり、申し訳ありません。ご回答ありがとうございます。

    >インストール単位が異なるアプリケーション間では、DLL を共有しないのが正しいです。

    >Program Files 配下に Common Files なんてフォルダもありますが、強く利用を推奨している文書は見かけたことがありません。

     

    アプリケーションと同時にインストールするDLLファイルは、そのアプリケーションのアプリケーションフォルダ(またはそのサブフォルダ)

    にインストールし、共有DLLファイルとしてはインストールしないということでしょうか。

    (共有DLLファイルの上書きで既存のアプリケーションが動かなくなるのを防ぐためでしょうか)

    そうであればインストールしているDLLファイルのインストール箇所をアプリケーションフォルダに移動できないか検討してみます。

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

    2011年5月12日 7:56
  • yuuki1947さんの仰っている"共有DLLファイル"というのは、どこまでの範囲なのかがわからないのですが
    ソフトウェア ロゴ要件では、以下のように決まっています。

    A) side-by-sideではない場合

    1) ファイルを複数のソフトウェア会社で使用する

    System ディレクトリに配置して、バージョンの下位互換性を保証する

    2) 1 社だけで使用する(1社内の複数製品間で共有に使用する)

    配置場所は

    CSIDL_PROGRAM_FILES_COMMON
    CSIDL_PROGRAM_FILES_COMMONX86
    http://msdn.microsoft.com/ja-jp/library/bb762494.aspx

    の下に会社名や製品名のサブフォルダーを作成して配置します。

    (会社内での決め事)
    ・バージョン管理(下位互換性)
    ・どの製品がインストールするのか

    B) side-by-sideの場合

    これは、とても面倒ですが、VC++のランタイムのようにside-by-side DLLにして
    デジタル署名、マニフェストと共に厳密なバージョン管理をしてside-by-sideフォルダ 「C:\Windows\winsxs」に配置します。
    ...ですが、ほとんど見たことないですね。


    これらは、Windows 7対応でということではなく、以前から変わっていません。
    ロゴ取得を行わないにしても、可能な限り従うべきだと思います。

    なお、ロゴ取得の場合には、A)もデジタル署名が必須になります。


    ご参考に。


    • 編集済み artglass 2011年5月14日 17:57 インデントを付けました
    • 回答としてマーク 山本春海 2011年5月24日 9:02
    2011年5月14日 17:56
  • artglass 様

    返信が遅くなり、申し訳ありません。ご回答ありがとうございます。

    >yuuki1947さんの仰っている"共有DLLファイル"というのは、どこまでの範囲なのかがわからないのですが
    >ソフトウェア ロゴ要件では、以下のように決まっています。

    >A) side-by-sideではない場合

    >1) ファイルを複数のソフトウェア会社で使用する

    >System ディレクトリに配置して、バージョンの下位互換性を保証する

    >2) 1 社だけで使用する(1社内の複数製品間で共有に使用する)

    >配置場所は

    >CSIDL_PROGRAM_FILES_COMMON
    >CSIDL_PROGRAM_FILES_COMMONX86
    >http://msdn.microsoft.com/ja-jp/library/bb762494.aspx

    >の下に会社名や製品名のサブフォルダーを作成して配置します。

    >これらは、Windows 7対応でということではなく、以前から変わっていません。
    >ロゴ取得を行わないにしても、可能な限り従うべきだと思います。


    インストールしようとしているDLLはA)の1)にあたるものです。

    すると今まで通りSystem32フォルダの下にインストールするべきということになりますが、

    Windows7 Client Software Logo 文書以外にもソフトウェアロゴ要件

    について詳述した文書のようなものがあるのでしょうか。

    (Windows7のロゴ要件とは別にそういったWindowsアプリケーションに関する要件があるということでしょうか)

    そういった文書や書籍があれば、その名前を教えていただけないでしょうか。

    MSDN内をロゴなどをキーワードに探してみましたが以下のように

    「アプリケーションはシステムフォルダにファイルをインストールするべきではない」という文書しか見つけることができませんでした。

    http://msdn.microsoft.com/ja-jp/library/aa984684%28VS.71%29.aspx

    お手数ですがよろしくお願い致します。

    2011年5月17日 0:36
  • Windows Logo Program の要件は、過去のOSからの積み重ねになっています。
    新 OS が加わると、それにより変更になった箇所の更新が行われるようになっています。

    今回の該当部分ですが、

    Designed for Windows XP Test Framework 1.1.1
    http://www.microsoft.com/downloads/en/details.aspx?FamilyId=2842ED69-68C2-468B-B324-9A5F6E054070&displaylang=en

    これをダウンロードして、展開すると「LogoTestFramework111.doc」というファイルがあります。
    ここに

    T2.6  Install any shared files that are not side-by-side to the correct locations

    という章があり、これが現状の Windows Logo Program でも生きています。

    一応、以下の URL にも

    http://msdn.microsoft.com/ja-jp/library/cc421992.aspx

    に日本語化されたものがあったりします。

    Windows Logo Program については、Microsoft Partner Network に登録して
    問い合わせをすると、かなり詳細に教えてくれますよ。

    • 回答としてマーク 山本春海 2011年5月24日 9:02
    2011年5月18日 5:29
  • artglass 様


    Windows Logo Programの要件に関する文書についてご回答いただき、ありがとうございます。

    ご提示いただいた文書(日本語化されたもの)の 「2.6 サイド バイ サイド以外の共有ファイルは決められた場所にインストールすること」を確認しました。

    その他の要件に関してもご提示いただいた文書の内容も参考に作業を進めていきたいと思います。

    Microsoft Partner Networkについても登録して新たな情報が得られないか検討してみます。

    ありがとうございます。

    2011年5月19日 8:11
  • こんにちは、yuuki1947 さん。

    MSDN フォーラムのご利用ありがとうございます。フォーラム オペレーターの山本です。

    参考になる情報をいただいているようでしたので、勝手ながら私のほうで回答としてマークさせていただきました。
    渋木宏明 さん、artglass さん、情報ありがとうございます。

    いただいた情報の中で参考になった情報には、回答としてマークすることをお願いしています。
    回答としてマークすることで、今後このスレッドを参照される方にも有効な情報が分かり易くなると思いますので、ご協力よろしくお願いいたしますね。

    今後とも MSDN フォーラムをよろしくお願いします。それでは。
                                                                                                                                                         
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2011年5月24日 9:01
  • 山本春海 様

     

    回答の件、ご指摘ありがとうございます。

    以後、注意いたします。

    2011年5月26日 23:11