2011-12-17 5 views
2

Ну, я смотрел, как делать автоматическое обновление на Google, но не удался.Примеры автоматического обновления

Что я бы планировать, чтобы создать программу обновления (Another ехе вызывается QProcess хотя основной ехе), но здесь Ihave вопросы:

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

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

+1

Вам необходимо * Inter-process communication *, Qt имеет набор классов D-Bus, которые подходят для этого. – cmannett85

ответ

0

Во-первых, я никогда не сталкивался с необходимостью создавать что-либо кроме 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 
    } 
}