2014/12/21

アプリケーションを実行するとエラー「サイド バイ サイド構成が正しくない」が出た場合の対処法~SxsTraceの使い方

私はいつもLenovo TrackPoint キーボードを使っているため、ほぼマウスやトラックパッドを使いません。
新型TrackPoint キーボードはPowerShellやVisual Studioを使うと縦スクロールが出来ない問題があるため、その時だけマウスを使っています。
今回Logicool製マウスをWindows 8.1のパソコンに接続、Logicool SetPointをインストールし、アプリ メニューから実行ファイルを起動すると全く反応がない問題に直面しました。
実行ファイル「SecPoint.exe」を直接起動すると「サイド バイ サイド構成が正しくない~」のエラー メッセージが表示されました。
今回は、アプリケーションを実行するとエラー「サイド バイ サイド構成が正しくない」が出た場合の対処法をメモ。
2014.12.23 VC++の正しいDLLをインストールする必要性について知人から教えて頂いたので、記事を修正・加筆しました

エラー内容

このアプリケーションのサイド バイ サイド構成が正しくないか、アプリケーションを開始できませんでした。
詳細については、アプリケーションのイベント ログを参照するか、コマンド ライン ツール sxstrace.exe を使用してください。
image

イベント ログを確認する

エラー メッセージに従い、イベント ログを確認。
"C:\Program Files\Logicool\SetPointP\SetPoint.exe" のアクティブ化コンテキストの生成に失敗しました。 従属アセンブリ Microsoft.VC90.MFC,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" が見つかりませんでした。 詳細な診断を行うには sxstrace.exe を実行してください。
よく分かりませんが、 従属アセンブリ(Dependent assembly)というものが見つからないようです。
image
<runtime>の<assemblyBinding>要素を読むと
アセンブリのバインディング ポリシーとアセンブリの場所をカプセル化します。 各アセンブリに の 1 種類のタグを使用します。
と書かれています。
また、このページはランタイムに関する内容のようです。
※エラーの原因は、ランタイムが不足しているためでしょうか。

SxsTrace.exeを使う場合

次に、SxsTraceという初めて聞くコマンドを使ってみます。
  1. 管理者権限でコマンド プロンプトを起動する
  2. SxsTrace.exeをTrace オプション付で実行、実行状態のままにしておく
    >SxsTrace Trace -logfile:d:\trace.etl
    image
  3. 問題のアプリケーションを実行し、エラー メッセージを表示させる
    image
  4. 2のウィンドウに戻り、Enter キーを押す
  5. SxsTrace.exeをParse オプション付で実行する
    >SxsTrace Parse -logfile:d:\trace.etl -outfile:d:\trace.txt
    image
  6. 解析したテキスト ファイルをテキスト エディタで開く
実際にチェックした結果は下記のようになりました。
結果最後のエラー内容がイベント ログと同じですね。
=================
アクティブ化コンテキストの生成を開始します。
入力パラメーター:
 Flags = 0
 ProcessorArchitecture = AMD64
 CultureFallBacks = ja-JP;ja;en-US;en
 ManifestPath = C:\Program Files\Logicool\SetPointP\SetPoint.exe
 AssemblyDirectory = C:\Program Files\Logicool\SetPointP\
 Application Config File = 
-----------------
情報: マニフェスト ファイル C:\Program Files\Logicool\SetPointP\SetPoint.exe を解析しています。
 情報: マニフェスト定義 ID は (null) です。
 情報: 参照: Microsoft.VC90.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
 情報: 参照: Microsoft.VC90.MFC,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"
 情報: 参照: Microsoft.Windows.Common-Controls,language="*",processorArchitecture="amd64",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.0.0"
情報: 参照 Microsoft.VC90.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" を解決しています。
 情報: ProcessorArchitecture amd64 の参照を解決しています。
  情報: カルチャ Neutral の参照を解決しています。
   情報: バインド ポリシーを適用しています。
    情報: 発行者ポリシーを C:\WINDOWS\WinSxS\manifests\amd64_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.8387_none_acd5043fe1d73003.manifest で見つけます。
    情報: 発行者ポリシーによってアセンブリ バージョンがリダイレクトされました。
    情報: 投稿ポリシー アセンブリ ID は Microsoft.VC90.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.8387" です。
   情報: アセンブリ調査の開始。
    情報: マニフェストを C:\WINDOWS\WinSxS\manifests\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.8387_none_08e793bfa83a89b5.manifest で調査しようとしました。
    情報: マニフェストが C:\WINDOWS\WinSxS\manifests\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.8387_none_08e793bfa83a89b5.manifest で見つかりました。
   情報: アセンブリ調査の終了。
情報: 参照 Microsoft.VC90.CRT.mui,language="*",processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.30729.8387" を解決しています。
 情報: ProcessorArchitecture amd64 の参照を解決しています。
  情報: カルチャ ja-JP の参照を解決しています。
   情報: バインド ポリシーを適用しています。
    情報: 発行者ポリシーが見つかりませんでした。
    情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
   情報: アセンブリ調査の開始。
    情報: WinSxS でアセンブリが見つかりませんでした。
    情報: マニフェストを C:\WINDOWS\assembly\GAC_64\Microsoft.VC90.CRT.mui\9.0.30729.8387_ja-JP_1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.mui.DLL で調査しようとしました。
    情報: カルチャ ja-JP のマニフェストが見つかりませんでした。
   情報: アセンブリ調査の終了。
  情報: カルチャ ja の参照を解決しています。
   情報: バインド ポリシーを適用しています。
    情報: 発行者ポリシーが見つかりませんでした。
    情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
   情報: アセンブリ調査の開始。
    情報: WinSxS でアセンブリが見つかりませんでした。
    情報: マニフェストを C:\WINDOWS\assembly\GAC_64\Microsoft.VC90.CRT.mui\9.0.30729.8387_ja_1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.mui.DLL で調査しようとしました。
    情報: カルチャ ja のマニフェストが見つかりませんでした。
   情報: アセンブリ調査の終了。
  情報: カルチャ en-US の参照を解決しています。
   情報: バインド ポリシーを適用しています。
    情報: 発行者ポリシーが見つかりませんでした。
    情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
   情報: アセンブリ調査の開始。
    情報: WinSxS でアセンブリが見つかりませんでした。
    情報: マニフェストを C:\WINDOWS\assembly\GAC_64\Microsoft.VC90.CRT.mui\9.0.30729.8387_en-US_1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.mui.DLL で調査しようとしました。
    情報: カルチャ en-US のマニフェストが見つかりませんでした。
   情報: アセンブリ調査の終了。
  情報: カルチャ en の参照を解決しています。
   情報: バインド ポリシーを適用しています。
    情報: 発行者ポリシーが見つかりませんでした。
    情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
   情報: アセンブリ調査の開始。
    情報: WinSxS でアセンブリが見つかりませんでした。
    情報: マニフェストを C:\WINDOWS\assembly\GAC_64\Microsoft.VC90.CRT.mui\9.0.30729.8387_en_1fc8b3b9a1e18e3b\Microsoft.VC90.CRT.mui.DLL で調査しようとしました。
    情報: カルチャ en のマニフェストが見つかりませんでした。
   情報: アセンブリ調査の終了。情報: 参照 Microsoft.VC90.MFC,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" を解決しています。
 情報: ProcessorArchitecture amd64 の参照を解決しています。
  情報: カルチャ Neutral の参照を解決しています。
   情報: バインド ポリシーを適用しています。
    情報: 発行者ポリシーが見つかりませんでした。
    情報: リダイレクトされたバインド ポリシーが見つかりませんでした。
   情報: アセンブリ調査の開始。
    情報: WinSxS でアセンブリが見つかりませんでした。
    情報: マニフェストを C:\WINDOWS\assembly\GAC_64\Microsoft.VC90.MFC\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.MFC.DLL で調査しようとしました。
    情報: マニフェストを C:\Program Files\Logicool\SetPointP\Microsoft.VC90.MFC.DLL で調査しようとしました。
    情報: マニフェストを C:\Program Files\Logicool\SetPointP\Microsoft.VC90.MFC.MANIFEST で調査しようとしました。
    情報: マニフェストを C:\Program Files\Logicool\SetPointP\Microsoft.VC90.MFC\Microsoft.VC90.MFC.DLL で調査しようとしました。
    情報: マニフェストを C:\Program Files\Logicool\SetPointP\Microsoft.VC90.MFC\Microsoft.VC90.MFC.MANIFEST で調査しようとしました。
    情報: カルチャ Neutral のマニフェストが見つかりませんでした。
   情報: アセンブリ調査の終了。
 エラー: 参照 Microsoft.VC90.MFC,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" を解決できません。
エラー: アクティブ化コンテキストの生成に失敗しました。
アクティブ化コンテキストの生成を終了します。

対処法:Visual C++ 2008 再配布をインストールする

イベント ログ、及びSxsTrace コマンドの結果より、
  • VC90.MFC.DLLが存在していない
  • DLLのプロセッサ アーキテクチャはamd64(x64)である
  • DLLのバージョンは、9.0.21022.8である
事が原因と予想 分かりました。
上記情報をmsdn ブログ「Part 1: Troubleshooting VC++ Side by Side Problems」にある表に当てはめると
Microsoft Visual C++ 2008 再配布可能パッケージ(x64)
が必要になります。

VC++9.0について調べると、VS2008かVS2008 SP1を使ってアプリケーションをビルドしているようなので、
Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ
をダウンロード、インストールすることで今回の問題を解決する事が出来ました。
VC++ 2008 再配布可能パッケージをインストールする事で今回の問題は解決しました。
インストール後にSxsTrace.exeを使用してみたところ、エラーになっていた箇所(画像左側)は解決されている情報になっていました。
image

サイド バイ サイド構成に関する問題が出た場合

ソフトウェア開発の深い知識が要求されるようですが、本エラーが出た場合は
  • イベント ログ、又はSxsTraceを実行し情報を集める
    • 存在していないDLL名
    • プロセッサ アーキテクチャ
    • バージョン
  • もし、ランタイムが存在していないようであれば、情報からバージョンを読み取る
  • 情報に合致したバージョンのランタイムをダウンロードし、インストールする
  • Windows Updateを実行し、更新プログラム(セキュリティ 更新プログラムを含む)を確認する
事を最低限度覚えておくとトラブルシューティングに役立つと思っています。

参考にしたサイト

スポンサーリンク

スポンサーリンク