web-dev-qa-db-ja.com

Delphi:アプリケーションをどのように自動更新しますか?

Delphiアプリケーションをシームレスに更新できるようにするために、独自のコードをローリングすることを考えていました。これは、「頻繁にリリースし、早期にリリースする」という考え方をさらに進めるためです。さまざまなDelphiソリューション(フリーウェアと有料の両方)が世の中にあります。それらのいずれかを使用したことがあるのか​​、またはこの分野で独自のソリューションを単に使用したのかをお聞きします。自動更新トピックに関するコメントは歓迎します。

39
utku_karatas

数年前、私は実際のプログラムの代わりに起動し、更新をチェックし、それらをロードしてインストールし(利用可能な場合)、最後に実際のアプリケーションを起動するシンプルなツールを書きました。

ただし、プログラムが適切に管理された環境で動作する場合、そのアプローチには問題があります。この場合、ユーザーは通常、プログラムディレクトリへの書き込みアクセス権を持ちません。このような環境では、自分のプログラムを単に更新することはできません。そのため、最近の多くのプログラムには独自の更新ツールが付属しており、高度な権限でインストールして実行できるため、標準ユーザーだけがシステムにログオンする場合でもプログラムの更新を適用できます。

ターゲットオーディエンスをパワーユーザーアカウントまたは管理者アカウントで実行すると想定できるかどうか、または上記の問題に対処する必要があるかどうかを決定する必要があります。 Vistaでは、事態はすでにかなり難しくなっています。

これらすべての問題(プロキシ経由のネットアクセス、インストールディレクトリへの書き込み権限の欠如、アップデーター自体が使用しているファイルを更新する必要性-いくつか例を挙げると)で、私はこれを自分でコーディングしようとはしません。利用可能なソリューションのいずれかがあなたがそれを必要とするすべてを行っているかどうかを確認する方がはるかに良いです。

13
mghie

どのスキームを使用する場合でも、実行中の.exeファイルの名前を実際に変更できることを知っておくと便利です。したがって、ファイルの名前を変更し、新しいファイルにコピーすることでうまくいきます。そして、次に誰かがプログラムを起動したときに、彼らは新しいバージョンを起動します。これはもちろん、citrix /ターミナルサーバー/ネットワーク共有の場合のように、多くのユーザーが同じ.exeファイルを実行する環境で非常に便利です。

18
Tom

Synapse ルーチンGetHTTPを使用して特定のリソースを返し、見つかった場合はローカルシステムをチェックして、更新が必要かどうかを確認します。もしそうなら、リソースは起動するページを教えてくれ、シェル実行にURLを投げるので、ユーザーの好みのブラウザが表示されます。

ほとんどの場合、ダウンロードは、ユーザーのシステムとデータベースを最新バージョンに更新するInnoSetupによって作成されたセットアッププログラムです。新しい「有料」アップグレードが必要な場合は、ユーザーに「購入アップグレード」フォームを送信します。私のWebリソースはASPページなので、顧客のバージョン番号に基づいて別のリソースにリダイレクトできます。

メインアプリケーション(私たちのアプリケーションにはサーバー部分とクライアント部分があります)には、サーバー上のクライアントファイルのバージョンがクライアント上のバージョンと異なるかどうかを確認するためにサーバーをチェックするローダーがあります... ifそのため、ユーザーが更新/元に戻したい場合は、ユーザーにプロンプ​​トを表示します。偶発的なバグがシステムに侵入することがあり、トラブルシューティングを支援するために特定のマシンのみをダウングレード/アップグレードする必要があるため、ユーザーにプロンプ​​トを表示することを選択しました。データベースパッチを介して更新される必要最低限​​のバージョンでデータベースレコードを維持しているため、バージョンを廃止する必要がある場合、それに応じてレコードが更新されます。

7
skamradt

私は TmxWebUpdate を使用しています。これは無料でシンプルで、プロセスを適切に制御できます。 TWebUpdateを備えたTMSコンポーネントパックを実際に所有していますが、切り替える正当な理由は本当に見つかりませんでした。

編集:リンクを更新しました

6
vrad

ダウンロード用のIndyとファイルパッチ用の http://sourceforge.net/projects/makeupdate/ にも基づいて、独自のソリューションも作成しました。それ以前は、いくつかの商用ツールを使用して試しましたが、誰も私が必要とするものを正確に実行していませんでした。

6
dangi

私たちも自分で転がしました。それほど難しくありません。

プロセスは次のようになります。

  • メインアプリが起動すると、(シナプスライブラリのfuncsを使用して)利用可能なアップデートがあるかどうかをチェックします(もちろん、チェックするように構成されていると仮定します)。

  • その場合は、ユーザーに通知し、更新するかどうかを尋ねます。

  • 存在する場合は、アップデーター.exeを起動し、メインアプリを閉じます。

  • アップデーターexeは、取得したテキストファイルの内容に基づいて新しいファイルをダウンロードし、ファイルメモリ内を保持します。

  • アップデーターがすべてを正しくダウンロードすると、ダウンロードしたファイルがディスクに保存され、置き換えられたファイルがバックアップされます。これにより、ダウンロードが中断した場合でも、ファイルの半分がインストールされたままになることはありません。

  • 最後に、メインアプリを再度起動し、自分自身を閉じます。

Vistaでのトリックは、管理者権限で実行するように強制するには、アップデータプログラムのマニフェストにエントリが必要なことです。

5
GrandmasterB

通常はサードパーティのツールを使用します。しかし、一部の状況では使用できなかったため、かなり標準的な独自のソリューションを作成しました。

  • 更新情報を含むxml(またはその他の形式)を取得します。
  • 新しいファイルが公開されている場合は、ダウンロードしてインストールします。
4
Toon Krijthe

次の手順に従う独自のソリューションを使用します。

  1. アプリケーションはhttpリソースに接続し、情報ファイル(iniテキストファイル)をメモリにダウンロードし、最新リリースのバージョン番号を確認します。
  2. 新しいバージョンが利用可能な場合、アプリは圧縮されたバイナリパッケージをexeの場所にダウンロードします。
  3. ダウンロードが完了すると、ユーザーはアプリケーションを再起動するよう求められます。
  4. 起動時に、アプリケーションは更新パッケージの存在を確認します
  5. アプリはパッケージのコンテンツを抽出します(通常は新しいアプリのexeですが、追加のリソースも可能です。たとえば、更新された言語ファイルなど)。ファイルごとに、まず現在のファイルと古いファイルの名前を一時的な名前に変更してから、新しいファイルを抽出します。プロセスがいずれかの時点で失敗すると、一時ファイルが復元されます。
  6. 終了すると、アプリは新しいexeを実行し、自分自身を閉じます。

追加のアップデーターは必要ありません。アプリexeはすべてを単独で処理できます。

圧縮パッケージには、独自の更新ビルダーを使用します。パッケージには、ファイルハッシュを含むファイルのインデックス、宛先フォルダー(メインexeへの相対パス)、および圧縮ファイルが含まれています。更新中に、保存されたハッシュと抽出されたファイルを比較して、破損したファイルを検出します。

Vistaでは、標準ユーザーアカウントがアプリケーションファイルを実際に更新できるようにする2つのソリューションが表示されます。

  1. プログラムのインストールディレクトリの権限を変更するようにセットアップを構成します。このようにして、「C:\ Program Files(x86)\ Your Company\You App」内のファイルを、権限が制限されたアカウントで変更できます。

    InnoSetupのサンプルコードは次のようになります。

    [Dirs]
    Name: "{app}"; Permissions: users-modify
    
  2. 更新するファイルをユーザー定義のディレクトリではなくProgramDataフォルダにインストールし、このディレクトリをオーバーライドフォルダとして使用します。 ProgramDataにファイルが存在する場合はそれらを使用し、そうでない場合はインストールディレクトリをチェックインします。

    InnoSetupコード:

    [Files]
    Source: "C:\Your Project\YourApp.exe"; DestDir: "{commonappdata}\Company Name\App Name\"; 
    
4
BlackOut

私は TWebUpdate を使用しています。それは問題なく動作し、興味深いオプションがたくさんありますが、ドキュメントはそれほど大きくなく、いくつかの問題にぶつかりました-ファイルだけでなく、フルインストーラーをダウンロードするのはそのためです...

私はこの質問に目を光らせています。

4
stg

「stg」や「GuyWithDogs」と同じように、TMSのTWebUpdateを使用しています。ドキュメントはそれほど素晴らしいものではありませんが、学ぶことはそれほど難しくありません。

TWebUpdateを使用すると、使用するプロトコルにいくつかのオプションがあり、HTTP、FTP、またはネットワークアクセスを介して実行できます。

通信層の場合、TWebUpdateはWinInetを使用します。一部のマシンでは、Windows/IE URLキャッシュがフラストレーションになる可能性があるため、最初にキャッシュから自動更新サーバーのアドレスをクリアして、サーバーから収集した情報が最新の。

1
bprasetio