web-dev-qa-db-ja.com

Qtクロスプラットフォームアプリケーションで自動更新を有効にするにはどうすればよいですか?

ユーザーからの努力なしに自分自身を更新できるアプリケーションが大好きです(Mac用の Sparkle フレームワークを考えてください)。 OSの詳細を気にすることなく、Qtアプリケーションでこれを行うために利用できるコード/ライブラリはありますか?

少なくともWindows、Mac、およびユーザー所有のLinuxバイナリの場合。

Mac版にSparkleを統合し、Linuxの場合に何かをコーディングすることができます(スタンドアロンのユーザー所有のバイナリのみ。プログラムがパッケージ化されている場合は、 distribution パッケージングを台無しにしません)。 Windows側で助けてくれる人を探しますが、それはひどく苦痛です。

49
F'x

OK、それで私はそれを「(プラットフォームに依存しない)方法」と見なしていると思います。ひどすぎる!

0
F'x

これは完全なソリューションではありませんが、自動更新用のパッケージを作成してインストールするためのクロスプラットフォーム(Windows、Mac、Linux)ツールは https://github.com/mendeley/Update-Installerで入手できます。 。このツールは、アップデートの公開やダウンロードを扱いません。

これはQtベースのアプリケーションで使用するために作成されましたが、更新インストーラーを小さくスタンドアロンで構築しやすくするために、インストーラーは標準システムライブラリ(C++ランタイム、Linux/Macではpthreads/libz/libbz2、WindowsではWin32 API)のみを使用します、MacではCocoa、Linuxではフォールバック付きのGTK)。これにより、アプリケーションが依存する可能性のあるQtの新しいバージョンやその他の非システムライブラリを含む更新プログラムの配布が簡単になります。

これを検討する前に、私はお勧めします:

  • 2つのプラットフォームのみを構築する場合は、それらのプラットフォームに標準の十分にテストされた自動更新フレームワークの使用を検討してください。 Sparkle Macの場合、 Google's Omaha Windowsまたは一般的なインストールフレームワーク(InstallShieldなど)に組み込まれた自動更新システム。 BitRockを試したことはありません。
  • Macでは、Mac App Storeが良いオプションかもしれません。 https://bugreports.qt.io/browse/QTBUG-16549 を参照してください。
  • Linuxでは、.debパッケージとそれをホストする単純なリポジトリを作成することを検討してください。ユーザーがリポジトリを設定すると、システム全体のソフトウェア更新ツールが新しいリリースの確認とインストールを行います。ただし、新しいリポジトリをセットアップする手順は、多くの新しいUbuntu/Debianユーザーにとって複雑すぎます。私たちが行ったこと、およびDropboxとGoogleが行ったことは、パッケージのインストールの一部としてリポジトリをセットアップする.debパッケージを作成することです。

アップデーターの作成に関するその他の注意事項:

  • Windows Vista/7では、アプリケーションがシステム全体(C:\ Program Files\$ APPNAMEなど)にインストールされている場合、アップデーターがインストールディレクトリへの書き込み権限を取得しようとすると、ユーザーに恐ろしいUACプロンプトが表示されます。これは、ユーザーが書き込み可能なディレクトリにインストールすることで回避できます(これはGoogle Chromeが行うことです)と収集しました)、またはAuthenticode証明書を取得し、それを使用してアップデータバイナリに署名します。
  • Windows Vista/7では、アプリケーション.exeまたはDLLは使用中は削除できませんが、アップデーターは既存の.exe/DLLを一時ディレクトリに移動してスケジュールすることができます。次回の再起動時に削除するため。
  • Ubuntuでは、ディストリビューションの更新後、サードパーティのリポジトリが無効になります。 Googleは、必要に応じてリポジトリを再追加するcronジョブを作成することで、この問題を回避します。
21
Robert Knight

恥知らずなプラグイン: Fervor 、Sparkleに触発されたシンプルなマルチプラットフォーム(Qtベース)アプリケーション自動更新プログラム。

9
Linas

恥知らずなプラグイン:これは比較的古い質問ですが、最近作成した「QSimpleUpdater」という名前のライブラリについて言及すると役立つと思いました。新しいバージョンがあるかどうかを通知するだけでなく、変更ログを任意の形式(HTMLやRTFなど)でダウンロードし、ダイアログを使用してアプリケーションから直接更新をダウンロードできます。

Qtプロジェクトに期待できるように、Qtがサポートするすべてのプラットフォームで動作します(Windows、Mac、Linuxでテスト済み)。

リンク:

スクリーンショット:

enter image description here

6
Alex Spataru

Sparkleとは少し動作が異なりますが、 BitRock InstallBuilde rには、Qtで記述されたオートアップデートが含まれており、独立して使用できます(免責事項、私は元のBitRock開発者です)。これは商用アプリですが、オープンソースプロジェクトの無料ライセンスがあります。

3
Daniel Lopez

pdateNode を使用すると、ソフトウェアを更新するすべての可能性が得られます。クロスプラットフォームのQtクライアントを使用しており、オープンソースは無料です!

[〜#〜] update [〜#〜]これについてさらに分析を行ったところ、このソリューションが本当に気に入りました。

長所:

  • オープンソースは無料です!!!クライアントでもオープンソースです: https://github.com/updatenode/unclient
  • クライアントはすでにいくつかの言語にローカライズされています
  • アップデートに関して非常に柔軟です。単一の非バイナリを更新することもできます。
  • さらに、クライアントを介してメッセージを表示する方法を提供します。
  • すべての一般的なLinuxディストリビューション、単一のWindowsバイナリ、およびMac用のインストーラーとソリューション(Macを持っていないので試していません)のバイナリーとインストーラーをすぐに使用できます。
  • 使いやすいウェブサービス、素晴らしい統計と更新チェックが数分で統合されます

短所:

  • オンラインサービスにマルチユーザー管理がありません。多分彼らは将来それをするでしょう-私は間違いなく彼らのフィードバックポータルでそれを提案します
  • クライアントはGUIクライアントのみです。そのため、GUIフロントエンドなしで実行するには、クライアントを縮小する必要があります(おそらく私のような人にのみ必要です;-))

結論として、このソリューションは非常に新しいため、ここには多くの可能性があると思います。私は間違いなく自分のプロジェクトでそれを使用し、それらからのさらなる楽しみにしています!いいぞ!

2
inspector

ブログの投稿CocoaとQtの混合は、Macプラットフォームの問題を解決する場合があります。

2
Rakesh Singh

WebUpdateはwxWidgetsで記述されていますが、非常に便利です。しかし、心配しないでください。これは、更新を処理する別のアプリです。統合する手順は非常に簡単です。2つのXMLファイルを記述して、アップデーターを実行するだけです。そして、はい、それはクロスプラットフォームです。

それの利点は、新しいバージョンについての通知とそれをダウンロードするためのリンクをポップアップに提供するだけでなく、必要なすべてを自動的にダウンロードして解凍/インストールすることです。もう1つのことは、カスタマイズ可能なアクションです。

プロジェクトのメインページは here です。 docs を読むか、公式の tutorial をご覧ください。

2
Roman Kruglov

私は、Mac OS X、Linux、およびほとんどすべてのUnixで美しく機能する自動更新ライブラリを開発しました。これにより、ファイルを開いたままファイルのリンクを解除できます。その理由は、ダウンロードしたパッケージを既存のアプリケーションの上に単純に抽出したためです。残念ながら、私はこの機能に依存していたため、Windowsでは開いているファイルのリンクを解除できないため、Windowsで問題が発生しました。

私が見つけることができる唯一の選択肢は、MoveFileExを再起動時の置換フラグと共に使用することですが、それはひどいです。

ただし、アプリケーションの作業ディレクトリの名前を変更しても、Windows 7およびWindows XPでは機能します。まだWindows Vistaを試していません。

2
cheez

プラグインとその作成方法と使用方法を読むことをお勧めします。アプリケーションアーキテクチャがモジュール式で、異なるプラグインに分割されている場合。 Google Auto Updateユーティリティ http://code.google.com/p/omaha/ をご覧ください。これを使います。

1
Ankur Gupta

Thibault Cuvelierは、更新プログラムを開発するためのチュートリアル(フランス語)を書いています。私は説明がフランス語であることを知っています(そして誰もがフランス語を理解していません)が、これは Google Translate のようなWebトランスレータで読むことができると思います。これにより、クロスプラットフォームのアップデーターが作成されますが、自分で作成する必要があります。

私の知る限り、チュートリアルで説明されているアップデータの唯一の部分は、ファイルのダウンロード部分です。これが役立つ場合は、チュートリアルn updater avec Qtを参照してください。

お役に立てば幸いです。

1

これは古い質問ですが、回答にSquirrelがありませんBEST SOLUTION、これは私がqt 5.12.4でqtクイックで実行している「my qml app」です。これは他の言語でも実行できます

私はwindowsでこれをやっています、リスのmacバージョンもあります、私はLinuxについて知りません

  1. nugetパッケージエクスプローラーのリリースをダウンロード https://github.com/NuGetPackageExplorer/NuGetPackageExplorer/releases
  2. nugetパッケージエクスプローラーを開き、このディレクトリ 'lib/net45'を追加します。netアプリの有無に関係なく、qtアプリケーションでこれを実行します。そうしないと機能しません。
  3. このフォルダーにすべてのファイルを追加し、メタデータでバージョンを指定します
  4. nupkgファイルを保存する
  5. リスリリースをダウンロード https://github.com/Squirrel/Squirrel.Windows/releases
  6. windows環境パスにリスを追加する
  7. cmdを開き、nupkgファイルのディレクトリに移動します。
  8. squirrel --releasify file_name.nupkg->リリースフォルダーが新しくなりました。アプリやその他のファイルをインストールするsetup.exeファイルがあるはずです。
  9. 新しいバージョンを作成するには、2、3、4、7、8を再度実行します。更新の場合、更新に必要なファイルのみが差分ファイルを作成します。このファイルをサービスディレクトリ、たとえば、必要なWebサイトの更新フォルダーに配置します。 IISでディレクトリの参照を無効にし、アプリケーションを自動更新するには、アプリケーションのルートディレクトリの親フォルダにあるUpdate.exeを呼び出す必要がありますappdir/../update.exe --update http://yourserver.com/upates/アプリケーションの再起動後、アプリは新しいバージョンで開始する必要があります
  10. リスのドキュメントは https://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/getting-started/0-overview.md にあり、nugetパッケージエクスプローラーはこちら- https://github.com/NuGetPackageExplorer/NuGetPackageExplorer そして、ダウンロード可能なバージョンの動的生成に使用できるnugetパッケージエクスプローラーを使用したくない場合は、nuget.exeのみも使用できますから https://www.nuget.org/downloads

簡単です。これで、サーバーと自動更新アプリから更新をダウンロードする自動更新アプリができました。詳細については、ドキュメントをご覧ください。
note:iisの場合 https://github.com/Squirrel/OldSquirrelForWindows/issues/205

1
Mahdi Khalili