サイドバイサイドエラー（VC90.CRT Ver.9.0.30729.6161）について


ある日突然サイドバイサイドエラーが発生して、アプリケーション(Boxsync)が起動しなくなりました。

このエラーについて、イベントビューアの管理イベントから確認したところ、以下のような詳細が分かりました。

```
"C:\Program Files\Box\Box Sync\BoxSync.exe.Manifest" のアクティブ化コンテキストの生成に失敗しました。 
従属アセンブリ Microsoft.VC90.CRT,processorArchitecture="&#x2a;",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.6161" が見つかりませんでした。 
詳細な診断を行うには sxstrace.exe を実行してください。
```
まずは管理イベントに従って管理者権限でコマンドプロンプトからsxstrace.exeを実行します。

```
>SxsTrace Trace -logfile:c:\trace.etl
```
↓ここからトレースが開始します。

もう一度アプリを実行してサイドバイサイドエラーを発生させます。

コマンドプロンプト上でEnterキーを押下します。
↑ここでトレースが終了します。

トレースファイルが終了したので、テキストファイルへ出力します。

```
>SxsTrace Parse -logfile:c:\trace.etl -outfile:d:\trace.txt
```

トレースファイルを確認すると、AMD64用のVC++9.0用のマニフェストファイルが見つからないことが分かる。
更にversion="9.0.30729.6161"については、Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ MFC のセキュリティ更新プログラムに含まれているようだ。
こちらのダウンロードリンクからvcredist_x64.exeを選択すれば、必要なファイルは手に入る。

https://www.microsoft.com/ja-jp/download/confirmation.aspx?id=26368


```
=================
アクティブ化コンテキストの生成を開始します。
入力パラメーター:
	Flags = 0
	ProcessorArchitecture = AMD64
	CultureFallBacks = ja-JP;ja
	ManifestPath = C:\Program Files\Box\Box Sync\BoxSync.exe.Manifest
	AssemblyDirectory = C:\Program Files\Box\Box Sync\
	Application Config File = 
-----------------
情報: マニフェスト ファイル C:\Program Files\Box\Box Sync\BoxSync.exe.Manifest を解析しています。
	情報: マニフェスト定義 ID は (null) です。
	情報: 参照: Microsoft.VC90.CRT,processorArchitecture="&#x2a;",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.6161"
	情報: 参照: Microsoft.Windows.Common-Controls,language="&#x2a;",processorArchitecture="&#x2a;",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.0.0"
情報: 参照 Microsoft.VC90.CRT,processorArchitecture="&#x2a;",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.6161" を解決しています。
	情報: ProcessorArchitecture AMD64 の参照を解決しています。
		情報: カルチャ Neutral の参照を解決しています。
			情報: バインド ポリシーを適用しています。
				情報: 発行者ポリシーを C:\Windows\WinSxS\manifests\amd64_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4940_none_acd19a1fe1da248a.manifest で見つけます。
				情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
			情報: アセンブリ調査の開始。
				情報: WinSxS でアセンブリが見つかりませんでした。
				情報: マニフェストを C:\Windows\assembly\GAC_64\Microsoft.VC90.CRT\9.0.30729.6161__1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.DLL で調査しようとしました。
				情報: カルチャ ja のマニフェストが見つかりませんでした。

			情報: アセンブリ調査の終了。
情報: 参照 Microsoft.VC90.CRT.mui,language="&#x2a;",processorArchitecture="AMD64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.6161" を解決しています。
	情報: ProcessorArchitecture AMD64 の参照を解決しています。
		情報: カルチャ ja-JP の参照を解決しています。
			情報: バインド ポリシーを適用しています。
				情報: 発行者ポリシーが見つかりませんでした。
				情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
			情報: アセンブリ調査の開始。
				情報: WinSxS でアセンブリが見つかりませんでした。
				情報: マニフェストを C:\Windows\assembly\GAC_64\Microsoft.VC90.CRT.mui\9.0.30729.6161_ja-JP_1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.mui.DLL で調査しようとしました。
				情報: カルチャ ja-JP のマニフェストが見つかりませんでした。
			情報: アセンブリ調査の終了。
		情報: カルチャ ja の参照を解決しています。
			情報: バインド ポリシーを適用しています。
				情報: 発行者ポリシーが見つかりませんでした。
				情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
			情報: アセンブリ調査の開始。
				情報: WinSxS でアセンブリが見つかりませんでした。
				情報: マニフェストを C:\Windows\assembly\GAC_64\Microsoft.VC90.CRT.mui\9.0.30729.6161_ja_1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.mui.DLL で調査しようとしました。
				情報: カルチャ ja のマニフェストが見つかりませんでした。
			情報: アセンブリ調査の終了。
情報: 参照 Microsoft.Windows.Common-Controls,language="&#x2a;",processorArchitecture="&#x2a;",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.0.0" を解決しています。
	情報: ProcessorArchitecture AMD64 の参照を解決しています。
		情報: カルチャ ja-JP の参照を解決しています。
			情報: バインド ポリシーを適用しています。
				情報: 発行者ポリシーが見つかりませんでした。
				情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
			情報: アセンブリ調査の開始。
				情報: WinSxS でアセンブリが見つかりませんでした。
				情報: マニフェストを C:\Windows\assembly\GAC_64\Microsoft.Windows.Common-Controls\6.0.0.0_ja-JP_6595b64144ccf1df\Microsoft.Windows.Common-Controls.DLL で調査しようとしました。
				情報: カルチャ ja-JP のマニフェストが見つかりませんでした。
			情報: アセンブリ調査の終了。
		情報: カルチャ ja の参照を解決しています。
			情報: バインド ポリシーを適用しています。
				情報: 発行者ポリシーが見つかりませんでした。
				情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
			情報: アセンブリ調査の開始。
				情報: WinSxS でアセンブリが見つかりませんでした。
				情報: マニフェストを C:\Windows\assembly\GAC_64\Microsoft.Windows.Common-Controls\6.0.0.0_ja_6595b64144ccf1df\Microsoft.Windows.Common-Controls.DLL で調査しようとしました。
				情報: カルチャ ja のマニフェストが見つかりませんでした。
			情報: アセンブリ調査の終了。
		情報: カルチャ Neutral の参照を解決しています。
			情報: バインド ポリシーを適用しています。
				情報: 自動サービス ポリシーによってアセンブリ バージョンがリダイレクトされました。
				情報: 投稿ポリシー アセンブリ ID は Microsoft.Windows.Common-Controls,processorArchitecture="AMD64",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.7601.18837" です。
			情報: アセンブリ調査の開始。
				情報: マニフェストを C:\Windows\WinSxS\manifests\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.18837_none_fa3b1e3d17594757.manifest で調査しようとしました。
				情報: マニフェストが C:\Windows\WinSxS\manifests\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.18837_none_fa3b1e3d17594757.manifest で見つかりました。
			情報: アセンブリ調査の終了。
情報: 参照 Microsoft.Windows.Common-Controls.mui,language="&#x2a;",processorArchitecture="AMD64",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.7601.18837" を解決しています。
	情報: ProcessorArchitecture AMD64 の参照を解決しています。
		情報: カルチャ ja-JP の参照を解決しています。
			情報: バインド ポリシーを適用しています。
				情報: 発行者ポリシーが見つかりませんでした。
				情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
			情報: アセンブリ調査の開始。
				情報: WinSxS でアセンブリが見つかりませんでした。
				情報: マニフェストを C:\Windows\assembly\GAC_64\Microsoft.Windows.Common-Controls.mui\6.0.7601.18837_ja-JP_6595b64144ccf1df\Microsoft.Windows.Common-Controls.mui.DLL で調査しようとしました。
				情報: カルチャ ja-JP のマニフェストが見つかりませんでした。
			情報: アセンブリ調査の終了。
		情報: カルチャ ja の参照を解決しています。
			情報: バインド ポリシーを適用しています。
				情報: 発行者ポリシーが見つかりませんでした。
				情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
			情報: アセンブリ調査の開始。
				情報: WinSxS でアセンブリが見つかりませんでした。
				情報: マニフェストを C:\Windows\assembly\GAC_64\Microsoft.Windows.Common-Controls.mui\6.0.7601.18837_ja_6595b64144ccf1df\Microsoft.Windows.Common-Controls.mui.DLL で調査しようとしました。
				情報: カルチャ ja のマニフェストが見つかりませんでした。
			情報: アセンブリ調査の終了。
情報: マニフェスト ファイル C:\Program Files\Box\Box Sync\Microsoft.VC90.CRT.MANIFEST を解析しています。
	情報: マニフェスト定義 ID は Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.6161" です。
	エラー: マニフェストで検出されたコンポーネントの ID が要求されたコンポーネントの ID と一致しません。参照は Microsoft.VC90.CRT,processorArchitecture="AMD64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.6161" です。定義は Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.6161" です。
エラー: アクティブ化コンテキストの生成に失敗しました。
アクティブ化コンテキストの生成を終了します。

```

考察：リリース時のモジュール依存関係について、開発者はビルド時に組み込まれるMFCのバージョンアップに注意する必要がある。
分離アプリケーションまたは side-by-side アセンブリのマニフェストを作成するには、2 つの方法があります。 まず、アセンブリの作成者が、規則および名前付けの要件に従って手動でマニフェスト ファイルを作成できます。 また、プログラムが CRT、MFC、ATL などの Visual C++ アセンブリのみに依存する場合は、リンカーによってマニフェストを自動的に生成できます。 

参考：Windows XP で分離アプリケーションと Side-by-Side アセンブリをビルドし、サービスを提供する方法 
https://msdn.microsoft.com/ja-jp/library/ms997620.aspx