3

マニフェストが依存していると言う実行可能ファイルを持っています

Microsoft.VC90.CRT 9.0.21022.8
Microsoft.VC90.CRT 9.0.30729.1

Windows 7 では、この実行可能ファイルは問題なく実行されます。Windows Server 2008 R2 では、この実行可能ファイルは実行に失敗し、次のメッセージが表示されます。

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

これは予想外でした。ランタイムの可用性に関しては、Windows 7 と Windows Server 2008 R2 は非常に似ているはずだと思いました。どちらのマシンもかなりきれいです。Windows 7 マシンは、何もない新規インストールです。Windows Server 2008 R2 マシンには、Windows Update からの一部の更新しかありません。

Windows 7 マシンの WinSxS ディレクトリを調べたところ、

Microsoft VC90.CRT 9.0.30729.4926

Windows Server 2008 R2 マシンの WinSxS ディレクトリを調べたところ、

Microsoft VC90.CRT 9.0.30729.4926

存在するランタイムは、マニフェストで指定されているものよりも新しいものですが、Windows Server 2008 R2 システムは新しいランタイムへのリダイレクトに失敗します。Windows Server 2008 R2 で sxstrace を実行すると、次のように表示されます。

INFO: Applying Binding Policy
    INFO: No publisher policy found.
    INFO: No binding policy redirect found.

Windows 7 で sxstrace を実行すると、次のようになります。

INFO: Applying Binding Policy
    INFO: Find publisher policy at C:\Windows\WinSxS\manifest\amd64...
    INFO: Publisher Policy redirected assembly version.
    INFO: Post policy assembly identity is...

VS 2008 ランタイムと VS 2008 SP1 ランタイムをインストールする以外に、これを解決する方法はありますか? アセンブリの全体的な考え方は、システムが古いランタイムをオーバーライドして新しいランタイムに置き換えることができるようにすることだと思いました。

4

2 に答える 2

0

原則として、WinSxS ではアセンブリの互換性のある新しいバージョンが古いバージョンを置き換えることができますが、VS ランタイムはこの機能を利用せず、コンパイルされたのと同じバージョンにのみバインドします。アプリケーションのすべてのコンポーネントを同じバージョンのライブラリに対して再コンパイルするか (複数の malloc ヒープの問題を回避するため、おそらく最適です)、両方のランタイムをインストールします。

于 2011-05-22T19:51:47.637 に答える