なぜsystem32にMsvcr71.dllをインストールしないのですか?


3

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

私(開発者ではなく管理者として)が怠惰な道をたどってインストールすることにした場合、どうすればいいのですか? Msvcr71.dll (そして Msvcp71.dll 私がそれにいる間)に system32 各アプリケーションのディレクトリにコピーを置くのではなく、ディレクトリ(32ビットWindows XPまたはWindows 7システムの場合)?アプリケーションディレクトリにものをコピーすることを含まない必要なDLLをアプリケーションに提供するための別の良い解決策はありますか?

最初の回答の後に追加された: 互換性のないAPIの変更点 5月 言及されたDLLに対してなされた、しかし私が見つけた非互換性についてのほとんどすべての言及はゲームまたはビデオコーデックとしなければならなかった。今のところ、私は破損のリスクはかなり小さいと思います。私は何かが足りないのですか?

回答:


5

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

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

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

もう1つの良い解決策は、アプリケーションごとに独自のPATHを設定することです。たとえば、次のようなバッチを書くことができます。

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

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

編集 特にあなたが使用するアプリケーションについて言及していないので、バージョン衝突の危険性を推定することはほとんど不可能です。これが私が私のPC(Windows 7 / x64)上のすべての異なるバージョンを検索した理由です。以下のファイルが見つかりました。 alt text

すべてのファイルはこれら2つのコピーです:7.10.3052.4と7.10.6030.0。 7.10.3052.4もdll-files.comが提供するものです。

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


4

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

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

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


0

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

それ以外に、2つのことが思い浮かびます。
1)DLLはすでに問題のシステム上にある可能性があります
2)必要なDLLが存在しない場合は、それらをインストールするためのセットアップパッケージがMicrosoftから提供されていると確信しています。それは私があなたにお勧めするもので、DLLファイルを単調に置き換えたり追加したりする代わりに使うことをお勧めします。

なぜシステム全体のDLLに触れてはいけないかの完璧な例は、GTKでの私の経験です。異なるアプリケーションは異なるバージョンのGTKを使用します。あるアプリケーションが "遅延"してGTK用のシステム全体のDLLをインストールすることを決めたのを覚えています。 GTKを使用した他のアプリケーションはもう動作しませんでした。


私が質問で述べたように、私の役割はソフトウェアを開発することではなく、それが実行されることを確実にすることです。問題のDLLはシステムに同梱されていなかったので、私は何も置き換えません。
hillu

私のGTKの例を見てください。なぜあなたはそれをまとめることができないのかあなたは答えませんでした、私はinnosetupがそれをとても簡単にすることを意味します。新しいバージョンをコンパイルしたら、ボタンを押すだけで、指定したすべてのファイルを含むセットアッププログラムが作成され、必要な場所に配置されます。
Natalie Adams

私はソフトウェアの作者ではありません、コンパイルするものは何もありません。
hillu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.