[Qt-interest] updating QT application

Mandeep Sandhu mandeepsandhu.chd at gmail.com
Fri Apr 23 06:24:32 CEST 2010


On Thu, Apr 22, 2010 at 6:54 PM, Bob Hood <bhood2 at comcast.net> wrote:
> On 4/21/2010 9:46 PM, Nikos Chantziaras wrote:
>> On 04/21/2010 04:49 PM, Andre Somers wrote:
>>> On 21-4-2010 15:37, David Boosalis wrote:
>>>> If updates can be done via FTP QFTP is a good way to go. Simply check
>>>> the version number against what is on the server. On Linux it might be
>>>> a bit tricky if you have to install it as root. Windows it might be a
>>>> bit easier as you can put your download an installer and launch it
>>>> after the download completes with QProcess. Maybe on Linux you can
>>>> download it as a RPM or debian package and figure out how to launch
>>>> the package manager.
>>>
>>> I think on linux, you should actually leave the updates to the package
>>> system period. No separate updater should be needed.

Have you considered using a version control system like GIT or SVN or
some such for managing updates?

I too am looking for an easy way to manage software updates for our
embedded system.

A version control system "seems" to fit the bill. Any new s/w update
can be published on a public repo from which a client can download the
new update if it finds a newer version available.

Only problem is that over time, the VCS's storage will increase as
it'll keep all the previous versions as well (haven't figured out how
to keep only the last revision and discard the rest). But this is less
of a problem if your VCS can manage binary diffs (since all s/w
updates will some sort of binary blobs/images) and only the diffs will
be stored. I think GIT can do that.

Your thoughts?

Regards,
-mandeep

>>
>> Won't work if the app is not included in the repos.
>>
>> However, you can have "check for updates" functionality that won't try
>> to update, but inform the user (maybe on startup) that there's a new
>> version available.
>
> I'm actually using this approach with a utility I created for the
> developers on my team.  Since we do not have an available HTTP server
> running, it connects to an FTP location to which all personnel have
> access when it starts up:
>
>    ...
>    ftp_version_check = new QFtp(this);
>    connect(ftp_version_check, SIGNAL(commandFinished(int, bool)), this,
> SLOT(slot_ftp_command_finished(int, bool)));
>    connect(ftp_version_check, SIGNAL(listInfo(const QUrlInfo &)), this,
> SLOT(slot_ftp_list_info(const QUrlInfo &)));
>    ...
>    show_status_message(tr("Checking for updates..."), 10000);
>    ftp_version_check->connectToHost("<address>");
>    ftp_version_check->login("<username>", "<password>");
>    ftp_version_check->list("<path>");
>    ...
>
> and when the list information arrives, it uses a QRegExp to scan the
> file names for the release notes file, which also happens to contain the
> version number as part of its name:
>
>    ...
>    QRegExp
> version_expression("^release_([-+]?[0-9]*\\.?[0-9]+(\\.[0-9]+)*)$");
>    ...
>
> Once found and extracted, I test it against the version of the running
> application, and if it is newer, I set up a single-shot timer that will
> announce the availability to the user:
>
>    ...
>    QTimer::singleShot(60000 * 2, this, SLOT(slot_announce_new_version()));
>    ...
>
> They can then download and update at their leisure.
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>




More information about the Qt-interest-old mailing list