Windowsでは、少なくとも実行中のアプリケーションが独自の.exeファイルと静的にリンクされたすべての.dllファイルをロックしています。これにより、再起動を防ぐためにアプリケーションが直接リードすることを防ぎます(再起動がOKであれば、アプリケーションは MOVEFILE_DELAY_UNTIL_REBOOT
フラグをMoveFileExに渡して上書きすることができます)とにかく遅れているように、それは自分の.exeです)。これは、アプリケーションが通常、自分の.exeでアップデートをチェックしないが、アップデートをチェックしてから、「本物の」アプリケーションを起動するシムを起動する理由です。実際には、shimは適切に設定されたマニフェストファイルのおかげで、OS自体によってさえも可能です。 Visual Studioのビルドされたアプリケーションは、これをプレハブウィザードパッケージツールとして入手します。 Visual C ++アプリケーションのClickOnce展開を参照してください。
典型的なLinuxアプリケーションは、OSの多くの多くの味があるため、それ自体を更新しません。ほとんどのアプリケーションはソースとして配布され、自動地獄のいくつかのバージョンを実行して自分自身を構成してビルドし、 make install
(これらはすべてパッケージの後ろで自動化できます)でインストールします。 Linuxの特定のフレーバーのためのバイナリとして配布されているアプリケーションでも、自分自身をコピーするのではなく、新しいバージョンを横に並べてインストールし、 シンボリックリンク
をクリックすると新しいバージョンが有効になります。
OS XのアプリケーションはPosixの風味のものであればLinuxのバケツに入ってしまったり、最近あなたのためにアップデートを扱うMac AppStoreアプリバケツに入ったりします。
自分の自己アップデートを実行することは、これらのテクノロジ(ClickOnce、RPM、AppStore)のいずれの高度化にも到達せず、ユーザーにディスカバリ、アップグレード、アンインストールに対する予想される動作を提供することになります。私はその流れに行き、それぞれのプラットフォームでこれらの技術を使用します。