2009-08-26 9 views
2

ダイナミックリンクでは、SxSを使用しても、Windows Updateが来てVC8 CRTのバージョン(たとえばセキュリティ上の欠陥がある)を踏みとめてしまい、古いバージョンではアプリケーションの実行に失敗します。静的にVC CRTにリンクしない理由は何ですか?

バイナリのサイズを増やす以外に、VC CRTとのダイナミックリンクを維持する重要な理由は何ですか?

+0

あなたのプログラムは更新されたCRTをセキュリティ修正プログラムと共にロード(または試行)しようとしていますが、更新されたCRTとの不一致のために機能しません。 –

答えて

4
  1. セキュリティ修正プログラムの最新情報を入手するのがよい理由です。それ以外の場合は、固定CRTを使用してアプリケーションを再構築し、顧客に展開する責任があります。
    • 共有CRTを使用すると、ほとんどのDLLのページをプロセス間で共有できるため、システムのメモリフットプリントが少なくなります。
+0

3.アプリケーションに複数のDLLがある場合、実行時と1つのヒープのインスタンスをすべて共有するので、別のDLLによってmallocされた1つのDLLでメモリを解放できます。静的CRTにリンクされているモジュールのそれぞれ(またはいくつか)でこれを試すと、ヒープ関連のエラーが発生します。 –

0

あなたのプログラムでは、あなたが言及している「セキュリティリーク」の1つであるCRTから何かを使用しているとき。静的にリンクすると、ユーザーはセキュリティ上の欠陥の対象であることがわかりませんし、ウィルスの危険性があります。一方、プログラムが動的にリンクされているために動作しない場合、新しい安全なバージョンに更新する必要があります。

+0

私が見ている問題は、CRTの新しいバージョンと動的にリンクするように構築されたアプリケーションがあることです。以前のバージョンの別のマシンにそれをデプロイすると、依存関係が新しいバージョンになっているので、それは実行されません。 マイクロソフトではCRTを更新しましたが、再配布可能パッケージではなく、セキュリティ更新プログラムの一部として利用できるようです。したがって、顧客やユーザーがパッチの実行を拒否した場合、新しいCRTをマシンにインストールすることができなくなるため、アプリケーションを実行することができなくなります。私はここで何が欠けていますか? –

0

あなたはWindowsで幸運です。そして、Linuxは文字通りがライブラリのとなり、あなたはそのすべてに問題があります。 :-)

私が理解する限り、図書館のベンダーは、特にMicrosoftの場合、下位互換性を常に保持しています。したがって、可能な解決策は、古いシステムにアプリケーションを構築することです。マイクロソフトでは、すべてのバージョンでアプリケーションを実行する方法でCRTライブラリを開発することに留意してください。

2

私は静的リンクを推奨します。ハッカーは、多くのユーザーがシステムにインストールしたアプリケーションをターゲットにしているため、セキュリティは大きな問題ではありません。アプリケーションのユーザー数が100万人を超えていない限り、ハッカーが悪用される心配はありません。

ダイナミックリンクが嫌いです。それは私にはあまりにも壊れやすい感じです。

編集:ユーザーにアプリケーションの最新バージョンがインストールされていることを確認するには、メインアプリケーションと共に自動的にインストールされるアップデータアプリケーションも作成します。 Windowsでは、これをサービスとして実装できます。

1

正しく実行された場合は、はダイナミックリンクには問題ありません。アプリケーションは実行に失敗しません。唯一難しいのは、Microsoftがサポートしている方法(再配布可能なマージモジュール - MSM、MSI、ダイナミックリンク)に現在使用している方法からインストーラを構築することです。情報源からの貴重なアドバイスについては、this linkをご覧ください。ブログからいくつかの興味深い引用符:

    ++ライブラリのVisual Cを再配布するために
  • あなたが必要なライブラリを配布するために、適切な.MSMファイルとそれに付随する政策.MSMなどがありますする必要があるすべて
  • また、強調するには - Click Onceを使用してアプリケーションを展開しない限り、VCRedist * .exeを使用しないでください。
  • これは(私の注意:静的リンク)は実際にあなたの製品を顧客に出荷するときに行う正しいことだと思います。

私はあなたが(多分あなたが今などMSIを使用していない)、これを実装するための非自明な作業を行う必要があるかもしれないことを同意しませんが、私はリソースが許すならば、あなたがに切り替えることを試みるべきだと思います上記の推奨される方法。

上記のようにしないと、アプリケーションはある時点で実際に動作しなくなります。開発者は、Microsoftが上記のサポートされている方法に本当に従わなかったと非難している。たぶんMSは、MSDN上ではブログをより頻繁にリンクしてその言葉を広めることはないと非難するだろうが、それはそれに関するものだ。

関連する問題