Примеры автообновления - PullRequest
       9

Примеры автообновления

2 голосов
/ 17 декабря 2011

Ну, я искал, как сделать автообновление в Google, но безуспешно.

То, что я планировал бы создать апдейтер (еще один exe, вызываемый QProcess, хотя основной exe), но здесь у меня есть несколько вопросов:

Как сделать QProcess тихим? Если есть новая версия, как я могу показать уведомление в окне, откуда был запущен процесс (я имел в виду, что я создал процесс в Game.exe, я хочу отправить уведомление в Game.exe из Updater.exe что доступна новая версия.)

Спасибо за ответы.

1 Ответ

0 голосов
/ 22 февраля 2012

Во-первых, я никогда не сталкивался с необходимостью создавать что-либо кроме QThread для удовлетворения моих потребностей в обновлении.QProcess будет полезно, если после обновления пользователь захочет загрузить, установить и перезапустить программу, пока пользователь продолжит работу с основной программой.(Но все это может быть достигнуто с помощью сценария оболочки, сценария Python, даже файла BAT)

Когда вы используете QProcess, вам придется полагаться на сигналы readyReadStandardError() и readyReadStandardOutput().Затем приложение, вызываемое вашим процессом, должно отправить свои выходные данные stderr или stdout . Updater.exe должен записать в любой из этих файлов.

Я бы предположил, что ваш Updater использует QNetworkAccessManager::finished(QNetworkReply *reply).Когда этот слот вызывается, сделайте что-то лучше , чем это:

void Updater::replyFinished(QNetworkReply *reply){
    QString r(reply->readAll());
    if(r.contains(SERVER_REPLY_UPDATE_AVAILABLE)){
        qDebug() << "yes";
    }else{
        qDebug() << "no";
        QApplication::quit();
    }
}  

Если Updater.exe будет полноценным приложением с графическим интерфейсом, невызовите метод show(), если он не нужен, и он должен работать в фоновом режиме.Я бы предпочел сценарий, но вы меня знаете.

Тогда ваш Game.exe настроит QProcess.Вы можете передавать аргументы процессу в функции QProcess::start().

Хорошие аргументы, которые помогут направить процесс обновления:

  • Game.exe номер версии
  • "check_for_updates"
  • "ignore_updates"
  • "download_update"

наконец, в Game.exe :

...
connect(process,SIGNAL(readyReadStandardError()),this,SLOT(readProcessReply()));
...

void Game::readProcessReply(){
    QString r(process->readAllStandardError());
    if(r.contains("yes")){
        //show your dialog here
    }else{
        //do nothing
    }
}
...