it-swarm-ja.com

Msvcr71.dllをsystem32にインストールしてみませんか?

いくつかの古いアプリケーションで必要とされる不足しているMsvcr71.dllの信頼できるソースを探しているときに、MSDNの記事 Visual C++での共有Cランタイムコンポーネントの再配布 に出くわしました。開発者へのアドバイスは、DLLをsystem32ではなくアプリケーションのディレクトリにドロップすることです。このディレクトリ内のDLLは、システムパスの前に考慮されるためです。

私(開発者ではなく管理者として)が怠惰なパスを取り、Msvcr71.dll(および私がそこにいる間はMsvcp71.dll)をsystem32ディレクトリ(32ビットWindows XPまたはWindows7システム)各アプリケーションのディレクトリにコピーを置く代わりに?アプリケーションディレクトリへのコピーを伴わない必要なDLLをアプリケーションに提供する別の良い解決策はありますか?

最初の回答の後に追加:互換性のないAPIの変更が行われたことを理解していますmay言及されたDLLに加えられましたが、ほとんどすべての言及Googleを使用して見つけた非互換性の多くは、ゲームやビデオコーデックに関係していました。今のところ、破損のリスクはかなり小さいと思います。私は何かが足りないのですか?

3
hillu

主な(唯一の?)問題は、Msvcr71.dllの異なるバージョン間の互換性です。 7.10.0が7.10.1とわずかに互換性がなく、アプリケーションApp1が古い動作に依存し、アプリケーションApp2が新しい動作に依存するとします。さらに、両方のアプリケーションは、このC++ランタイム自体を出荷しません。この場合、2つのアプリケーションのいずれかが失敗します。

それらのケースはどのくらいの頻度ですか?よくわかりませんが、めったにないと思います。

Msvcr71.dllのバージョンの違いによっては、アプリケーションの起動に失敗したり、特定の機能が動作しなかったりします。

別の良い解決策:アプリケーションごとに独自のPATH。たとえば、次のようなバッチを作成できます。

PATH=c:\PathToMSVCR71.DLL_Version_7.10.0
myapp1.exe

このようにして、同じDLLを複数のアプリケーションで再利用し、簡単に更新できます。

[〜#〜] edit [〜#〜]特に使用するアプリケーションについて言及していないため、バージョンの衝突の危険性を見積もることはほとんど不可能です。そのため、PC(Windows 7/x64)でさまざまなバージョンをすべて検索しました。次のファイルを見つけました。 alt text

すべてのファイルは、7.10.3052.4と7.10.6030.0の2つのコピーにすぎません。 7.10.3052.4は、dll-files.comが提供するものでもあります。

また、これらのバージョンのdumpbin /imports /exports msvcr71.dllの出力を比較しましたが、エクスポートもインポートも変更されていません(予想どおり)。

5
kaboom

リンク先の記事の「詳細情報」には、CRTをsystem32に配置すると、「正しいバージョンのCRTがないコンピューターで異なるバージョンのCRTにリンクされているアプリケーションを実行すると問題が発生する可能性がありますDLLインストールされています。」

たとえば、App1がSpinMyRainbowPinWheel関数を機能させるには、バージョン2.1のMsvcr71.dllが必要だとします。 App1の開発者は、App1のプログラムファイルディレクトリにMsvcr71.dllをインストールしました。

Msvcr71.dllのバージョン2.0をsystem32に配置すると、App1は、プログラムファイルディレクトリにインストールされているものではなく、システムファイルの使用を開始します。 SpinMyRainbowPinWheel関数は機能しなくなり、マイクに息を吹き込んだときに風車がモニター上で回転していないため、CEOから電話がかかってきます。ビジネスはひどく止まります!

4
Rob D.

しないでください。システム全体のDLLを置き換えたり追加したりしないでください。なぜバンドルできないのか分かりませんか?そのため、インストーラーパッケージを作成します。 MicrosoftにはVS6を使用したインストール作成ツールがあることは知っていますが、それがない場合は、innosetupのようなものを使用できます。そして、DLLを同じフォルダに入れるように言われるのは、アプリケーションが最初にDLLを探す場所だからです。

それとは別に、2つのことが頭に浮かびます。
1)DLLは問題のシステムにすでに存在している可能性があります
2)Microsoftは、必要なDLLが存在しない場合に、それらをインストールするためのセットアップパッケージを提供していると確信しています。 DLLファイルを無計画に置き換え/追加するのではなく、これを使用することをお勧めします。

システム全体のDLLに触れてはいけない理由の完璧な例は、GTKでの私の経験です。異なるアプリケーションは異なるバージョンのGTKを使用します。あるアプリケーションが「レイジー」であり、システム全体にインストールすることを決定したことを覚えていますDLL GTK用。GTKを使用した他のアプリケーションは動作しなくなりました。

0
Natalie Adams