9

私がいつも疑問に思っていることの1つは、ソフトウェアパッチがどのように機能するかです。多くのソフトウェアは、古いバージョンの上にインストールする必要があるバイナリで新しいバージョンをリリースするだけのようですが、一部のソフトウェア(特にWindowsなどのオペレーティングシステム)は、バグを修正したり、既存の機能に機能を追加したりする非常に小さなパッチをリリースできるようです。ソフトウェア。

ほとんどの場合、私が目にするパッチは、アプリケーション全体、またはアプリケーション内で使用される小さなファイルを置き換えることはできません。私には、実際のバイナリが変更されているように見えます。

これらの種類のパッチは実際にどのように実装されていますか?これがどのように機能するかを説明するリソースを誰かに教えてもらえますか、それともアプリケーション内のリンクされたライブラリなどの小さなコンポーネントを置き換えるのと同じくらい簡単ですか?

この方法で展開を行う必要はおそらくないでしょうが、それがどのように機能するかを知りたいと思います。パッチが実際にバイナリファイルの一部しか変更できないという私の理解が正しければ、これは.NETで実行できますか?それが私が最もよく知っているフレームワークであり、それがどのように機能するかを理解したいので、それを学びたいと思います。

4

2 に答える 2

14

これは通常、バイナリ差分アルゴリズムを使用して実装されます。つまり、最近リリースされたバージョンを新しいコードと比較します。ユーザーが最新バージョンを実行している場合は、差分を適用するだけで済みます。コンパイルされたコードは通常、バージョン間で非常に類似しているため、ソフトウェアに対して特にうまく機能します。もちろん、ユーザーが最新バージョンを実行していない場合は、とにかくすべてをダウンロードする必要があります。


一般的なバイナリdiffアルゴリズムには、いくつかの実装があります。bsdiffxdeltaは、優れたオープンソースの実装です。.NETの実装は見つかりませんが、問題のアルゴリズムはプラットフォームに依存しないため、プロジェクトのように感じる場合は、移植するのはそれほど難しくありません。

于 2008-09-28T05:07:16.137 に答える
2

Windows アプリケーションへのパッチ適用について話している場合、確認したいのは .MSP ファイルです。これらは .MSI に似ていますが、パッチとアプリケーションだけです。

MSDN ドキュメントのパッチ適用とアップグレードを参照してください。

.MSP ファイルが行うことは、更新されたファイルをアプリケーションのインストールにロードすることです。これは通常、更新された dll ファイルとリソース ファイルですが、任意のファイルを含めることができます。

インストールされたアプリケーションにパッチを適用するだけでなく、C:\WINDOWS\Installer にある修復ファイルも更新されます。次に、ユーザーが [プログラムの追加と削除] から [修復] を選択すると、更新されたパッチ ファイルも使用されます。

John Millikin によって議論されたバイナリ diff メソッドは、他のオペレーティング システムでも使用されなければならないと考えています。Windowsで動作させることはできますが、それはやや異質です。

于 2008-09-28T12:03:17.633 に答える