トップ回答者
Windows7の共有DLLインストール先について

質問
-
開発環境:
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ファイルをインストールした場合でも、インストール動作やアプリケーションの動作自体に
不具合は発生しないのですが、正しい対処法が存在するならなるべくその方法に準拠したいと考えています。
よろしくお願い致します。
回答
-
>Windows7ではこうした共有DLLファイルはどこにインストールするべきなのでしょうか。
インストール単位が異なるアプリケーション間では、DLL を共有しないのが正しいです。
Program Files 配下に Common Files なんてフォルダもありますが、強く利用を推奨している文書は見かけたことがありません。
>Windows7のSystem32フォルダ(64ビット版Windows7の場合はSysWow64フォルダ)に
>共有DLLファイルをインストールした場合でも、インストール動作やアプリケーションの動作自体に
>不具合は発生しないのですが互換性の維持のため、現状は動作する場合が多いと思います。
ですが、UAC 導入で大ゴケしたアプリケーションも多数あったわけで、ああいう感じでいつか、Windows OS のバージョンアップに伴って動作しなくなる日が来ると考えておくべきと思います。
- 回答としてマーク 山本春海 2011年5月24日 9:01
-
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)もデジタル署名が必須になります。
ご参考に。 -
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
すべての返信
-
>Windows7ではこうした共有DLLファイルはどこにインストールするべきなのでしょうか。
インストール単位が異なるアプリケーション間では、DLL を共有しないのが正しいです。
Program Files 配下に Common Files なんてフォルダもありますが、強く利用を推奨している文書は見かけたことがありません。
>Windows7のSystem32フォルダ(64ビット版Windows7の場合はSysWow64フォルダ)に
>共有DLLファイルをインストールした場合でも、インストール動作やアプリケーションの動作自体に
>不具合は発生しないのですが互換性の維持のため、現状は動作する場合が多いと思います。
ですが、UAC 導入で大ゴケしたアプリケーションも多数あったわけで、ああいう感じでいつか、Windows OS のバージョンアップに伴って動作しなくなる日が来ると考えておくべきと思います。
- 回答としてマーク 山本春海 2011年5月24日 9:01
-
渋木宏明 様
返信が遅くなり、申し訳ありません。ご回答ありがとうございます。
>インストール単位が異なるアプリケーション間では、DLL を共有しないのが正しいです。
>Program Files 配下に Common Files なんてフォルダもありますが、強く利用を推奨している文書は見かけたことがありません。アプリケーションと同時にインストールするDLLファイルは、そのアプリケーションのアプリケーションフォルダ(またはそのサブフォルダ)
にインストールし、共有DLLファイルとしてはインストールしないということでしょうか。
(共有DLLファイルの上書きで既存のアプリケーションが動かなくなるのを防ぐためでしょうか)
そうであればインストールしているDLLファイルのインストール箇所をアプリケーションフォルダに移動できないか検討してみます。
ありがとうございました。
-
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 様
返信が遅くなり、申し訳ありません。ご回答ありがとうございます。>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
お手数ですがよろしくお願い致します。
-
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
-
こんにちは、yuuki1947 さん。
MSDN フォーラムのご利用ありがとうございます。フォーラム オペレーターの山本です。
参考になる情報をいただいているようでしたので、勝手ながら私のほうで回答としてマークさせていただきました。
渋木宏明 さん、artglass さん、情報ありがとうございます。
いただいた情報の中で参考になった情報には、回答としてマークすることをお願いしています。
回答としてマークすることで、今後このスレッドを参照される方にも有効な情報が分かり易くなると思いますので、ご協力よろしくお願いいたしますね。
今後とも MSDN フォーラムをよろしくお願いします。それでは。
日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海