49

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

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

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

4

13 に答える 13

21

これは完全なソリューションではありませんが、自動更新用のパッケージを作成してインストールするためのクロスプラットフォーム (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 つのプラットフォーム用にのみ構築する場合は、これらのプラットフォーム用の標準的で十分にテストされた自動更新フレームワークを使用することを検討してください。SparkleMac、Google's OmahaWindows、または一般的なインストール フレームワーク (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 ジョブを作成することで、この問題を回避しています。
于 2011-09-11T12:03:53.347 に答える
9

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

于 2012-06-02T00:18:53.723 に答える
6

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

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

リンク:

スクリーンショット:

ここに画像の説明を入力

于 2015-01-16T01:02:35.293 に答える
3

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

于 2011-05-08T01:48:33.097 に答える
3

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

私が見つけた唯一の代替手段は、MoveFileEx を再起動時の置換フラグと共に使用することですが、それはひどいものです。

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

于 2010-04-03T21:46:18.430 に答える
2

ブログ投稿Mixing Cocoa and Qtは、Mac プラットフォームの問題を解決する可能性があります。

于 2011-02-12T16:42:31.797 に答える
2

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

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

プロジェクトのメイン ページはこちらです。ドキュメントを読むか、公式チュートリアルをご覧ください。

于 2012-08-10T08:34:30.253 に答える
2

これは古い質問ですが、最良の解決策である回答にリスはありません。これは、qt 5.12.4で qt quick "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. squirrel を Windows 環境のパスに追加する
  7. cmdを開き、nupkgファイルのディレクトリに移動します
  8. squirrel --releasify file_name.nupkg-> release フォルダー内に、アプリやその他のファイルをインストールする setup.exe ファイルがあるはずです。
  9. 新しいバージョンを作成するには、更新の場合は 2,3,4,7,8 をもう一度実行します。更新に必要なファイルのみであるデルタ ファイルが作成されます。このファイルは、必要な Web サイトの更新フォルダーなどのサービス ディレクトリに配置します。 IIS でディレクトリの参照を無効にし、アプリケーションを自動更新するには、アプリケーションの再起動後にアプリケーションのルート ディレクトリの親フォルダーにある Update.exe を呼び出す必要があります。appdir/../update.exe --update http://yourserver.com/upates/アプリは新しいバージョンで起動する必要があります。
  10. squirrel のドキュメントはhttps://github.com/Squirrel/Squirrel.Windows/blob/develop/docs/getting-started/0-overview.mdにあり、nuget パッケージ エクスプローラーはhttps://github.com/NuGetPackageExplorerにあります。 /NuGetPackageExplorerであり、 https ://www.nuget.org/downloads からダウンロードできるバージョンの動的生成に使用できる nuget パッケージ エクスプローラーを使用したくない場合は、nuget.exe のみを使用することもできます。

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

于 2019-08-17T07:27:21.000 に答える
2

ソフトウェアを更新するためのすべての可能性を提供するUpdateNodeを使用できます。クロス プラットフォームの Qt クライアントを使用しており、オープン ソースは無料です。

更新 それについてさらに分析を行ったところ、このソリューションが本当に気に入りました:

長所:

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

短所:

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

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

于 2014-03-20T09:02:36.970 に答える
1

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

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

それがお役に立てば幸いです。

于 2010-01-17T19:55:23.573 に答える
1

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

于 2010-01-16T18:46:06.870 に答える
0

OK、だから私はそれを「(クロスプラットフォームの)方法ではない」と考えていると思います。それはあまりにも悪いです!

于 2010-01-24T15:07:11.367 に答える
0

組み込みの自己解凍型パッチと更新プログラムで自動化できるソリューションを見つけました。窓用。私は彼らのsdkを使い始めました。https://agersoftware.com/docs/の膨大なドキュメントをご覧ください。sdk は securesdk と呼ばれ、アプリの SecureDelta sdk に付属しています。あらゆる種類のファイルで優れた仕事をし、lzma に含まれるデルタ アップデーターよりも優れた結果をもたらします

于 2021-04-28T11:08:16.770 に答える