Microsoft.VC90.CRT side-by-side アセンブリ
まったく!
マイクロソフトも次から次へとややこしくなっていく。
「side-by-side」などと一見かっこいい名前だが、VCのランタイムライブラリを使うのにいちいち、Microsoft.VC90.CRT.manifestというXMLで書かれたテキストファイルが必要ということ。
アプリケーションには、どのバージョンのVCのランタイムライブラリを使うかが埋め込まれており、それを実行するマシンに存在しない場合は、落っこちてしまう。
イベントログを見ると落ちた原因がわかるのだが、Microsoft.VC90.CRTが見つからないという結果になる。
そこで、「なんのこっちゃ?」となってしまう。
こういった場合、VCのランタイムをマイクロソフトのサイトよりダウンロードして、インストールすれば一件落着なのだが、USB等からスタンドアローンで動かすアプリの場合にはそうはいかなくなるのだ。
そういった場合は、落っこちたアプリケーションや使用しているDLLがどのVCのランタイムライブラリを要求するかを調べる。
やや強引な話だが、そのアプリケーションやDLLをテキストエディターで見ると、それらしいものが見つかる。
そこで、アプリケーションのexeが入っているフォルダーにMicrosoft.VC90.CRTというディレクトリを作成して、その中にMicrosoft.VC90.CRT.manifest とそのバージョンのmsvcm90.dll msvcp90.dll msvcr90.dllを入れてやれば正常に動くようになるのだ。
Microsoft.VC90.CRT.manifestは、動いているマシンのC:\windows\winsxs\Manifests の下にいーっぱい入っているのでその中から探します。
x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.manifest 等と長いファイル名になっているのをもってきて、microsoft.vc90.crt.manifest という名前に変更してやればよい。
side-by-side アセンブリは、VCのランタイムにかぎったことではないので、こういったことが起こった場合はこれを参考に考えればよいのである。
今回は、bindingRedirectについては、あまり調べていないのですが、これをminifestファイルに書く方法を調べた人がいれば、コメントしてください。
参考URL
http://msdn.microsoft.com/ja-jp/library/ms997620.aspx
http://msdn.microsoft.com/ja-jp/library/8477k21c(VS.80).aspx