現在のWindowsサイドバイサイドについて

以前にまとめてから随分と時間が経って、VisualStudioも2012となっているし、Windowsも8.1がプレビューとなっている現在、そろそろWinSxSについても情報更新しておくべきじゃないかと思ったので、この記事を書いています。

以前の記事は、WinSxS問題(2009年)VisualStudio2010でのWinSxS(2010年)というものを自分で書いたようです。

まず、VisualStudioによる大きな逆目が2010になります。

  • VisualStudio2010,2012は、生成されるexeにVCランタイムに関するマニフェストが含まれません。
  • VisualStudio2005,2008は、生成されるexeにVCランタイムに関するマニフェストが含まれます。

この挙動に注意する必要があります(2005,2008間でも挙動違いますが…)。

次に、OSについてですが、Windows XPまでは、外部マニフェストが有効です。
それ以降のOS WindowsServer2003からは、外部マニフェストよりも内部マニフェスト(埋め込みマニフェスト)が優先されるため、外部による変更ができません。
(情報元:http://msdn2.microsoft.com/ja-jp/library/ms235342(VS.80).aspx

このような変更点・注意点がありますが、マイクロソフトからダウンロードできる再頒布ランタイムをインストールすれば、どのOS環境でも気にすることなく配布したexeを実行することが出来ると思います。

しかし!この再頒布ランタイムをインストールしたくない場面というものはあるもので、
例えば以下のシチュエーションでしょうか。

  • 開発環境なので恒久的に更新されてしまうVC再頒布ランタイムは入れたくない
  • そもそもユーザー権限しかないので、VC再頒布ランタイムをインストールできない
  • 一時的に実行したいだけなので、VC再頒布ランタイムをインストールするなどして環境を汚したくない

企業のPCだと実は2が該当したりして、この環境でも動くアプリケーションにしておくのは便利だったりします。
一番簡単な解決方法は自分が作成するアプリケーションを、VCランタイムをスタティックリンクして生成する方法です。

VCでプロジェクト設定を開いて、コード生成の項目で、ランタイムライブラリをマルチスレッド(もしくはマルチスレッドデバッグ)を設定すること、です。これらで統一してexe,dllを作成して配布すれば上記の実行条件を満たすことが出来ます。

続いてマルチスレッドDLLやマルチスレッドデバッグDLLについてですが、これについては次回に続く、ということで。この話は長くなりそうです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする