トップ回答者
Windows SDK のサポートOSについて

質問
-
お世話になっております。
Windows SDK のサポートOSについて教えていただければと思います。
Windows Vista™ および .NET Framework 3.0 ランタイム コンポーネント用 Microsoft® Windows® Software Development Kit
上記のHPを見ると、「必要システム-サポートされているオペレーティング システム」に
記述されているOSは、Windows Server 2003、Windows Vista、Windows XPとなっています。
これは「このWindows SDKをインストールする環境(つまりビルド環境)」のサポートOSだと思われます。
だとすると、「このWindows SDKでビルドしたモジュールを実行する環境」のサポートOSは何になるのでしょうか。
スレッド「visual studio 2008 インストール要件、付属SDKのサポートOSについて」を見ると、
> ユーザーが作成したプログラムはユーザーが保証しなければなりません。
と記述があります。確かに作成したプログラムは作成者が動作を保証するのは当然だと考えています。
しかし、それ以前の問題として、「このWindows SDKでビルドしたモジュールを実行する環境」として
マイクロソフトが保証しているOSは何なのでしょうか。極端な話、このWindows SDKでビルドした
モジュールをWindows NT4.0で実行しても、正常動作するものもあります。しかしマイクロソフトは
それを保証しているわけではないと思います。
参考資料等を探したのですが、見つかりませんでした(探し方が悪いのかもしれません・・・)。
どなたかご存知の方がいらっしゃいましたら教えていただければと思います。
宜しくお願いします。
回答
-
初心者A さんからの引用
.NET Framework 3.0、.NET Framework 3.5は.NET Framework 2.0に対するアドオンのようなものだと聞いたことがあるのでひょっとしたらと思っていました。「アドオン」という理解ではまずいです。
.NET Framework 3.0は.NET Framework 2.0にクラスが増えただけという理解でも構いませんが、.NET Framework 3.5は既存の.NET Framework 2.0/3.0の部分を更新します。
単純な追加ではない点に留意して下さい。
参考:http://blogs.msdn.com/dd_jpn/archive/2007/11/13/6172535.aspx
初心者A さんからの引用 その意味では「このWindows SDKでビルドしたモジュールを実行する環境」のサポートOSとしては、
"マイクロソフトがメインストリームサポートおよび延長サポートを行っているOS"と考えればよいのでしょうか。
Windows SDK for Vistaのリリースノートには下記の記載があります。
http://download.microsoft.com/download/4/6/7/4672F516-3A2A-4845-A9C4-792F57AB58BD/ReleaseNotes.htm
Windows SDK に収録されているドキュメント、サンプル、およびツールは、Windows Vista、Windows XP Service Pack 2 (SP2)、Microsoft Windows Server 2003 Service Pack 1 (SP1) の各バージョンの Windows のアプリケーション プログラミング インターフェイス (API) に基づいて作成されています。プラットフォームによってはサポートされない API もあります。サポート対象のプラットフォームについては、各 API のドキュメントを参照してください
使い方によってはWindows 2000でも動くアプリを作れますが、MFCやヘッダ、コンパイラの組み合わせ等によってはビルドが通らなくなるなどの問題が生じます。
-
外池です。
少し話を整理して、基本的なことから話を積み上げましょう。今、話題にしているVisual Studioでビルド(あるいはコンパイル)した実行ファイル(exeやdll)の動作保証の範囲というものは、そもそも、漠然としすぎていると思います。
A)最も小規模なプログラムであれば、OSとは無関係な(OSのAPI呼び出しを行わない)ものになります。独自のライブラリーのようなものです。ただ、これも、Intelの32bitCPUで走るんですね? AMDのCPUで走るんですね? ということが気になるわけで、コンパイラーが生成するコードがどのCPUの命令セットと互換なのか、示してもらわないといけなくなります。これは、コンパイラーとCPU命令セットの互換性の話で、説明が載っているドキュメントが見つかると思います。
B)次に、OSのAPI呼び出しを行う場合、呼び出しを定義するヘッダーファイルが必要になりますが、Microsoftから提供されているヘッダーファイルがどのOSのバージョンに適合しているかは、示してもらわないと困りますよね? もし、そこにWin95でもOKと書いてあれば、そのとおり、OKなんでしょう。Win95でOKと書かれているAPI呼び出しだけをつかってコーディングして、IA32互換の命令セットを吐き出すコンパイラーを使ってコンパイルすれば、Win95で走ると考えて良いのでは? これは、どのOSがどのAPIをサポートしているか、また、そのAPIを適切に定義したヘッダーファイルが用意されているかの話であり、初心者Aさんご自身で見つけられたドキュメントの通りですよね。
C)さらに、OSそのものよりレベルの高いライブラリー(再配布が許されているDLLファイル)を使う場合、そのライブラリーがどのバージョンのOSに適合しているか、本来、ライブラリーの製作元は前提なり確認結果なり情報があるはずです。これは、私は良い資料を見たことがありませんので、できれば見てみたいものです。
D)プログラマー自身が作成したいくつかのDLL同士のバージョン間不整合の問題。これは、プログラマー側が管理しないといけない問題ではありますが、複数のプログラマーが居たり、他社製のDLLを使ったりすれば、混乱しがちです。
私が思いつくのはこの四つのレベルですが。C)とD)は、Microsoft殿が責任を持つ範囲か否かの違いはありますが、技術的には同質のものと思います。いわゆる「DLL Hell」と呼ばれるものですよね。.NET以前のVBのときは、OSのバージョン(サービスパックやIEのバージョンも含む)、VB自身のバージョンやSPに依存して、ものすごく相性の良し悪しがあったと記憶しています。
私としましてはC)の部分についてMicrosoft殿が情報を提供されているドキュメントがあれば知りたいところです。ただ、D)の問題もあって、末端のプログラマーにしてみれば、最後は自分で動作チェックをしてみるしかない、というオチかと。
-
「サポート」という言葉に何をどこまで求めていますか?
その定義を明確にしないと話が発散するかと思います。
初心者A さんからの引用
例えばGetWindowText APIの対応OSは以下のようになります。http://msdn.microsoft.com/ja-jp/library/cc364815.aspx
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降そう考えると各APIのサポート対象OSに準じることが可能か疑問となります。
「Windows 95やWindows NT 3.1に対応したコンパイラ、SDKでGetWindowTextを使うことができる」といったところまでしか言及していないかと思います。
初心者A さんからの引用 ちょっと混乱してきました。マイクロソフトは「実行環境のサポートOS」については明確に謳っていないのでしょうか。
明確には謳っていないと思いますが、先にも引用したとおり、Windows SDK for Windows Vistaであれば、「Windows Vista、Windows XP Service Pack 2、Windows Server 2003 Service Pack 1に基づいて作成されています」と明言されているので、これ以外のOSで動かすアプリを作る分は自己責任とみても、考えすぎではないでしょう。
事実、特定のバージョンのMFCと組み合わせてWindows 2000向けのビルドを行った場合、コンパイルエラーで止まります。
-
外池です。
ちなみに、私が現状使っているVisual Studio 2005に附属しているPlatform SDKのドキュメントのうち、最初のIntroductionを見ると、「本バージョンのPlatform SDKのドキュメント類は、以下の対象プラットフォーム上で実行できるアプリケーションの開発に必要な情報を提供する。Windows Server 2003、64-bit version of Windows、Windows XP、Windows 2000、Windows NT 4.0、Windows Me、Windows 98、及びWindows 95」となっています。まぁ、これを読めば、VS2005を使えばWindows 95まで遡ってアプリ作れますよ、と理解しますわね・・・。Platform SDKの範囲に限れば、ですが。VS2005のC++のコンパイラは、どれか特定のバージョンのWindowsとの相性の良し悪しってあるんでしょうか。
で、同じくVS2005に同梱のMFC8.0については、Windowsのどのバージョンに適合するのか・・・、何をみれば情報が得られるのでしょう? Release Noteみたいなものがあるのかな・・・。
-
外池 さんからの引用 VS2005のC++のコンパイラは、どれか特定のバージョンのWindowsとの相性の良し悪しってあるんでしょうか。
Windows 3.1で動くアプリは作れませんね。
VS2005で作成すると32ビットアプリケーションになるので。
他にもランタイムライブラリ側で特定のバージョンのWindows以降にしか存在しないAPIを呼んでいる可能性もあるかもしれません。
例えば、VC2005で追加された_sつきの関数の一部にはWindows 2000で実行できないものがあります。
http://msdn.microsoft.com/ja-jp/library/sxtz2fa8(VS.80).aspx
外池 さんからの引用 で、同じくVS2005に同梱のMFC8.0については、Windowsのどのバージョンに適合するのか・・・、何をみれば情報が得られるのでしょう? Release Noteみたいなものがあるのかな・・・。
例えば:
サポートされているオペレーティング システム : Windows 2000 Service Pack 3; Windows 98; Windows 98 Second Edition; Windows ME; Windows Server 2003; Windows XP Service Pack 2
現状、明示されることは少ないか、明示されていても怪しいところがあります。
その製品の発売時点で主流でなくなってきている、あるいはまもなくサポートライフサイクルが終了するWindows向けのアプリをビルドすることはリスクが高いと理解しておくべきかもしれません。(その判断は難しいですが。。。)
もちろん、明確にしろとMicrosoftに対して訴えかけていくのも一つの手ですね。
すべての返信
-
GX999さんご回答ありがとうございます。
GX999 さんからの引用 .NET Framework 3.0をインストールできるOSがWindows XP以降となっています。
必然的に、実行環境もWindows XP以降になります。申し訳ありませんが、こちらの質問内容が不十分でした。
.NET Frameworkの実行モジュールについては確かにそうなのですが、Windows SDKには
アンマネージドの実行モジュールを作成するためのライブラリがあり、Visual C++ 6.0などで
作成するような、アンマネージド C++のモジュールも作成可能です。そしてそのようなモジュールは
Windows NT4.0のような古いOSでも動作させることができます。
また確かにこのWindows SDKで.NET Framework 3.0の実行モジュールを作成した場合は、
.NET Framework 3.0をインストールできるOSがWindows XP以降となっているため、
実行環境もWindows XP以降になります。ただ.NET Framework 3.0だけではなく、
.NET Framework 2.0の実行モジュールのビルドも可能なのではないでしょうか(試したことが
無いので本当に可能かどうかわからないのですが・・・)。
その場合、.NET Framework 2.0をインストールできるOSはWindows 98以降、Windows 2000以降で
あるため、実行環境もそれに順ずるはずです。
今回の質問はマネージド、アンマネージド含めて、「このWindows SDKでビルドしたモジュールを
実行する環境」としてマイクロソフトが保証しているOSが何なのかを知りたくて投稿しました。
宜しくお願いします。
-
外池と申します。初心者Aさんのご質問には、私も、大変共感するものがあります。
こと、.Net Frameworkについては、どのOSにどのFrameworkがインストールできるかが示されており、また、プログラマの観点からすると、ビルドした自分のアプリがどのバージョンのFramewokで動くか、アプリで使っているFrameworkのクラスやメソッドがどのバージョンのFrameworkに対応しているか、一応調べられるので、その範囲では「自分のアプリが、どのOSで動かせるハズ」という当たりはつけられます。
しかし、.Net Frameworkじゃないアンマネージドなライブラリー(DLL類)は、どうなんでしょうね?
redist.txtに再配布してよいライブラリーが示されていますが、redist.txtに多少の情報を書き加えて、個々のDLLがどのOS(もっと詳しくはOSを構成するDLLファイルのバージョン等)と相性があるのか無いのか明らかにしてくれれば、スッキリすると思うのですが・・・。
初心者Aさんが仰っていることは、このようなことだと思うのですが、違いますか?
-
GX999さんご回答ありがとうございます。
やはり.NET Framework 2.0のものは作成できそうなんですね。.NET Framework 3.0、
.NET Framework 3.5は.NET Framework 2.0に対するアドオンのようなものだと
聞いたことがあるのでひょっとしたらと思っていました。
外池さんコメントありがとうございます。
外池 さんからの引用 redist.txtに再配布してよいライブラリーが示されていますが、redist.txtに多少の情報を書き加えて、個々のDLLがどのOS(もっと詳しくはOSを構成するDLLファイルのバージョン等)と相性があるのか無いのか明らかにしてくれれば、スッキリすると思うのですが・・・。
初心者Aさんが仰っていることは、このようなことだと思うのですが、違いますか?
私は個々のDLLとOSとの相性までの詳細なものは考えていませんでした・・・。
確かにそのような相性の情報があれば、モジュールを作る際に参考にできますよね。
今回は単純に何か問題が発生し、マイクロソフトに問い合わせた際に、「その組み合わせはサポート対象外です。」と
言われないかどうかを心配しています。
その意味では「このWindows SDKでビルドしたモジュールを実行する環境」のサポートOSとしては、
"マイクロソフトがメインストリームサポートおよび延長サポートを行っているOS"と考えればよいのでしょうか。
以上です。
-
初心者A さんからの引用
.NET Framework 3.0、.NET Framework 3.5は.NET Framework 2.0に対するアドオンのようなものだと聞いたことがあるのでひょっとしたらと思っていました。「アドオン」という理解ではまずいです。
.NET Framework 3.0は.NET Framework 2.0にクラスが増えただけという理解でも構いませんが、.NET Framework 3.5は既存の.NET Framework 2.0/3.0の部分を更新します。
単純な追加ではない点に留意して下さい。
参考:http://blogs.msdn.com/dd_jpn/archive/2007/11/13/6172535.aspx
初心者A さんからの引用 その意味では「このWindows SDKでビルドしたモジュールを実行する環境」のサポートOSとしては、
"マイクロソフトがメインストリームサポートおよび延長サポートを行っているOS"と考えればよいのでしょうか。
Windows SDK for Vistaのリリースノートには下記の記載があります。
http://download.microsoft.com/download/4/6/7/4672F516-3A2A-4845-A9C4-792F57AB58BD/ReleaseNotes.htm
Windows SDK に収録されているドキュメント、サンプル、およびツールは、Windows Vista、Windows XP Service Pack 2 (SP2)、Microsoft Windows Server 2003 Service Pack 1 (SP1) の各バージョンの Windows のアプリケーション プログラミング インターフェイス (API) に基づいて作成されています。プラットフォームによってはサポートされない API もあります。サポート対象のプラットフォームについては、各 API のドキュメントを参照してください
使い方によってはWindows 2000でも動くアプリを作れますが、MFCやヘッダ、コンパイラの組み合わせ等によってはビルドが通らなくなるなどの問題が生じます。
-
Azuleanさんご回答ありがとうございます。
Azulean さんからの引用 「アドオン」という理解ではまずいです。
.NET Framework 3.0は.NET Framework 2.0にクラスが増えただけという理解でも構いませんが、.NET Framework 3.5は既存の.NET Framework 2.0/3.0の部分を更新します。
単純な追加ではない点に留意して下さい。
参考:http://blogs.msdn.com/dd_jpn/archive/2007/11/13/6172535.aspx
.NET Framework 3.5は既存部分も更新されているのですね。すいません、勉強不足でした。
Azulean さんからの引用 Windows SDK for Vistaのリリースノートには下記の記載があります。
http://download.microsoft.com/download/4/6/7/4672F516-3A2A-4845-A9C4-792F57AB58BD/ReleaseNotes.htm
Windows SDK に収録されているドキュメント、サンプル、およびツールは、Windows Vista、Windows XP Service Pack 2 (SP2)、Microsoft Windows Server 2003 Service Pack 1 (SP1) の各バージョンの Windows のアプリケーション プログラミング インターフェイス (API) に基づいて作成されています。プラットフォームによってはサポートされない API もあります。サポート対象のプラットフォームについては、各 API のドキュメントを参照してください
使い方によってはWindows 2000でも動くアプリを作れますが、MFCやヘッダ、コンパイラの組み合わせ等によってはビルドが通らなくなるなどの問題が生じます。
つまり「このWindows SDKでビルドしたモジュールを実行する環境」としてマイクロソフトが保証しているOSは
各APIのサポート対象OSに準じるということでしょうか。
ただ各APIのサポート対象OSをMSDNライブラリで見ると、現在サポートが終了したOSも記述されています。
例えばGetWindowText APIの対応OSは以下のようになります。
http://msdn.microsoft.com/ja-jp/library/cc364815.aspx
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降そう考えると各APIのサポート対象OSに準じることが可能か疑問となります。
また、Windows SDK for Vistaのリリースノートには下記の記載があります。
3. サポートされるコンパイラ、プラットフォーム、関連ソフトウェア
このバージョンの Windows SDK は、Microsoft ® Visual Studio ®2005 の製品版をサポートしています。Visual Studio の Express Edition は、Visual Studio Express のサイトから無償でダウンロードできます。
このバージョンの Windows SDK に収録されているサンプルは、x86 プラットフォームおよび x64 プラットフォームでのビルドと実行がサポートされます。このバージョンでは、IA64 プラットフォームはサポートされません。
上記の「このバージョンの Windows SDK に収録されているサンプルは、x86 プラットフォームおよび x64 プラットフォームでのビルドと実行がサポートされます。」という記述を見る限り、x86 プラットフォームおよび x64 プラットフォームであり、かつ、APIがサポートされているOSならば、実行がサポートされるのでしょうか。
ちょっと混乱してきました。マイクロソフトは「実行環境のサポートOS」については明確に謳っていないのでしょうか。
例えばこちらで作成した実行モジュールがリンクしているマイクロソフトのモジュールにバグがあり、
それを修正してもらいたいときに受け付けてもらえるかどうか心配です(もちろんバグだとしても障害の度合いによって
修正する/しないの判断があるとは思いますが)。
実行環境のOSとビルド環境のSDKをマイクロソフトのサポートに言っただけで、
「そのSDKでビルドしたモジュールを、そのOSで実行した場合の組み合わせはサポート対象外です。
そのような問い合わせを受け付けること自体できません」と言われると困ったことになります。
以上です。
外池です。
少し話を整理して、基本的なことから話を積み上げましょう。今、話題にしているVisual Studioでビルド(あるいはコンパイル)した実行ファイル(exeやdll)の動作保証の範囲というものは、そもそも、漠然としすぎていると思います。
A)最も小規模なプログラムであれば、OSとは無関係な(OSのAPI呼び出しを行わない)ものになります。独自のライブラリーのようなものです。ただ、これも、Intelの32bitCPUで走るんですね? AMDのCPUで走るんですね? ということが気になるわけで、コンパイラーが生成するコードがどのCPUの命令セットと互換なのか、示してもらわないといけなくなります。これは、コンパイラーとCPU命令セットの互換性の話で、説明が載っているドキュメントが見つかると思います。
B)次に、OSのAPI呼び出しを行う場合、呼び出しを定義するヘッダーファイルが必要になりますが、Microsoftから提供されているヘッダーファイルがどのOSのバージョンに適合しているかは、示してもらわないと困りますよね? もし、そこにWin95でもOKと書いてあれば、そのとおり、OKなんでしょう。Win95でOKと書かれているAPI呼び出しだけをつかってコーディングして、IA32互換の命令セットを吐き出すコンパイラーを使ってコンパイルすれば、Win95で走ると考えて良いのでは? これは、どのOSがどのAPIをサポートしているか、また、そのAPIを適切に定義したヘッダーファイルが用意されているかの話であり、初心者Aさんご自身で見つけられたドキュメントの通りですよね。
C)さらに、OSそのものよりレベルの高いライブラリー(再配布が許されているDLLファイル)を使う場合、そのライブラリーがどのバージョンのOSに適合しているか、本来、ライブラリーの製作元は前提なり確認結果なり情報があるはずです。これは、私は良い資料を見たことがありませんので、できれば見てみたいものです。
D)プログラマー自身が作成したいくつかのDLL同士のバージョン間不整合の問題。これは、プログラマー側が管理しないといけない問題ではありますが、複数のプログラマーが居たり、他社製のDLLを使ったりすれば、混乱しがちです。
私が思いつくのはこの四つのレベルですが。C)とD)は、Microsoft殿が責任を持つ範囲か否かの違いはありますが、技術的には同質のものと思います。いわゆる「DLL Hell」と呼ばれるものですよね。.NET以前のVBのときは、OSのバージョン(サービスパックやIEのバージョンも含む)、VB自身のバージョンやSPに依存して、ものすごく相性の良し悪しがあったと記憶しています。
私としましてはC)の部分についてMicrosoft殿が情報を提供されているドキュメントがあれば知りたいところです。ただ、D)の問題もあって、末端のプログラマーにしてみれば、最後は自分で動作チェックをしてみるしかない、というオチかと。
「サポート」という言葉に何をどこまで求めていますか?
その定義を明確にしないと話が発散するかと思います。
http://msdn.microsoft.com/ja-jp/library/cc364815.aspx Windows NT/2000:Windows NT 3.1 以降 そう考えると各APIのサポート対象OSに準じることが可能か疑問となります。
初心者A さんからの引用
例えばGetWindowText APIの対応OSは以下のようになります。
Windows 95/98:Windows 95 以降
「Windows 95やWindows NT 3.1に対応したコンパイラ、SDKでGetWindowTextを使うことができる」といったところまでしか言及していないかと思います。
ちょっと混乱してきました。マイクロソフトは「実行環境のサポートOS」については明確に謳っていないのでしょうか。
初心者A さんからの引用
明確には謳っていないと思いますが、先にも引用したとおり、Windows SDK for Windows Vistaであれば、「Windows Vista、Windows XP Service Pack 2、Windows Server 2003 Service Pack 1に基づいて作成されています」と明言されているので、これ以外のOSで動かすアプリを作る分は自己責任とみても、考えすぎではないでしょう。
事実、特定のバージョンのMFCと組み合わせてWindows 2000向けのビルドを行った場合、コンパイルエラーで止まります。
外池です。
ちなみに、私が現状使っているVisual Studio 2005に附属しているPlatform SDKのドキュメントのうち、最初のIntroductionを見ると、「本バージョンのPlatform SDKのドキュメント類は、以下の対象プラットフォーム上で実行できるアプリケーションの開発に必要な情報を提供する。Windows Server 2003、64-bit version of Windows、Windows XP、Windows 2000、Windows NT 4.0、Windows Me、Windows 98、及びWindows 95」となっています。まぁ、これを読めば、VS2005を使えばWindows 95まで遡ってアプリ作れますよ、と理解しますわね・・・。Platform SDKの範囲に限れば、ですが。VS2005のC++のコンパイラは、どれか特定のバージョンのWindowsとの相性の良し悪しってあるんでしょうか。
で、同じくVS2005に同梱のMFC8.0については、Windowsのどのバージョンに適合するのか・・・、何をみれば情報が得られるのでしょう? Release Noteみたいなものがあるのかな・・・。
外池 さんからの引用 | |
|
Windows 3.1で動くアプリは作れませんね。
VS2005で作成すると32ビットアプリケーションになるので。
他にもランタイムライブラリ側で特定のバージョンのWindows以降にしか存在しないAPIを呼んでいる可能性もあるかもしれません。
例えば、VC2005で追加された_sつきの関数の一部にはWindows 2000で実行できないものがあります。
http://msdn.microsoft.com/ja-jp/library/sxtz2fa8(VS.80).aspx
外池 さんからの引用 | |
|
例えば:
|
現状、明示されることは少ないか、明示されていても怪しいところがあります。
その製品の発売時点で主流でなくなってきている、あるいはまもなくサポートライフサイクルが終了するWindows向けのアプリをビルドすることはリスクが高いと理解しておくべきかもしれません。(その判断は難しいですが。。。)
もちろん、明確にしろとMicrosoftに対して訴えかけていくのも一つの手ですね。
遅くてすみません。
重要と思われる情報が不足していると思うので若干補足させてください。
ネイティブコードの場合、サポートするOSはプログラマが#defineを使用して
stdafx.h等に定義するのが普通です。以下を参照してください。
http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx
上記ページを大雑把に説明すると
#define WINVER (設定値) // 最小限必要なプラットフォームのバージョン番号
#define _WIN32_WINNT (設定値) // 同じく、最小限必要なプラットフォームのバージョン番号
#define _WIN32_IE (設定値) // 最低限必要な Internet Explorerのバージョン番号
また、以前は
#define _WIN32_WINDOWS (設定値) // 同じく、最小限必要なプラットフォームのバージョン番号
// 但し、コンシューマーズOSのみ
も使われていました。
ちなみに、 NTDDI_VERSION は<sdkddkver.h>のヘッダー内で
_WIN32_WINNT を使って自動的に定義されます。
つまり、どのOSで動作させるかは、「それとは意識していなくても」
コード上で定義しているのであって、(ほぼ)自明なのです。