web-dev-qa-db-ja.com

Windowsアプリケーションを自動更新する最良の方法は何ですか?

Google Chrome自動更新 5時間ごと 。自分のアプリケーションでこの正確な機能を複製したい。この機能をWindowsに実装する最良の方法は何ですか?

67
John Shedletsky

この更新動作を再現するには、次の2つが必要です。

  1. アップデートを定期的にチェックするアップデーターアプリケーション。更新が見つかった場合は、自動的にインストールする必要があります。ほとんどの商用セットアップオーサリングツールには、優れたアップデータアプリケーションが含まれています。自分でアップデーターを作成することもできますが、思ったほど簡単ではありません。

  2. 製品バージョンごとのユーザーごとのインストール。ユーザーごとのインストールでは、ユーザープロファイルフォルダー(AppData、ローミングフォルダーなど)とHKEY_CURRENT_USERにのみデータが書き込まれます。プログラムファイルまたはHKEY_LOCAL_MACHINEはありません。

アップグレードをサイレントに実行できるように、ユーザーごとのインストールが必要です。インストールがマシンごとの場合、新しいバージョンのWindowsでは昇格のプロンプトが表示され、ユーザーは何が起こっているのかわかりません。

アップデーター

一部のアップデーターはサービスを使用します。自動更新の場合、サービスのインストールには管理者権限が必要なため、これは実際のソリューションではありません。そのため、インストールプロセスとその後の更新で昇格のプロンプトが表示されます。

別のアプローチは、ユーザーごとのアップデーターアプリケーションを使用することです。昇格は不要で、アプリケーションフォルダーにインストールできます。このタイプのアップデータは、スケジュールされたタスクとして、またはアプリケーション内から実行できます(アプリケーションの起動時に実行します)。

両方のシナリオで、アップデーター自体の更新が必要になる場合があることを考慮する必要があります。そのため、更新を実行するプロセスは、一時プロセス(たとえば、アップデータアプリケーションの一時コピー)でなければなりません。また、高度なしで実行する必要があります。これが、サービスがそれほど良いアイデアではない理由です。更新の前に自身を停止し、更新を処理する一時的なプロセスを使用し、終了したら再び開始する必要があります。

考慮すべきその他のものは次のとおりです。

  • 権限の問題(更新プロセスに特権または昇格が必要な場合)
  • ダウンロード場所
  • 更新検出メカニズム(アップデーターが新しいバージョンをインストールする必要があるかどうかを検出する方法)

アップデート

一般的な誤解は、更新プログラムがアプリケーションファイル(メインアプリケーションEXEなど)である必要があるということです。これはめったにありません。なぜなら、更新ではファイルだけでなく上書きする必要があるからです。

ほとんどの更新は、インストールパッケージ(MSIなど)またはパッチ(MSP)です。更新ロジック全体を処理するため、これが最良のアプローチです。

  • 実行中のアプリケーションを検出する
  • リソースを更新する
  • 製品情報の更新(ショートカット、コントロールパネルのプログラムと機能アプレットなど)

インストールパッケージは、アップデータアプリケーションも簡素化します。このタイプのアップデートでは、アップデーターは利用可能なアップデートを検出し、ダウンロードして実行するだけです。

更新は次の2つの方法で機能します。

Windowsインストーラーは両方を強力にサポートしているため、 MSIパッケージ および MSPパッチ を使用できます。また、サイレントインストールもサポートしているため、アップデーターが行う必要があるのは、コマンドラインパラメーターでパッケージを実行することだけです。

これらのパッケージは、 [〜#〜] allusers [〜#〜] プロパティを介して、ユーザーごとまたはマシンごとのインストールもサポートします。

ディストリビューションの更新

アップデータといくつかの更新パッケージを決定したら、配布メカニズムも必要です。

  • アップデートが利用可能であることをアップデーターに通知する方法(たとえば、サーバー上のアップデート情報ファイル)
  • 更新プログラムがインストールされているかどうかを検出する方法(したがって、更新プログラムは1回だけインストールされます)

これはすべて非常に簡単ではありません。これが多くの製品がサードパーティのアップデーターを使用する理由です。市販のセットアップオーサリングツールでさえ、パッケージのアップデーターを提供します。

カスタムアップデーターは、多くの製品を所有する大企業で主に使用されます。投資に見合う価値があるからです。

81
Cosmin Pirvu

まったく同じ機能を使いたい場合は、できます。 Googleはそれをオープンソース化しました。

https://github.com/google/omaha

27
user479870

Winsparkleを試してください- https://github.com/vslavik/winsparkle 。 C++ライブラリです。

3
Y.N