嗯,我一直在尋找如何做一個谷歌自動更新,但沒有成功。自動更新程序示例
我會計劃是建立一個更新(另一個exe文件被稱爲QProcess中,雖然主要的exe文件),但這裏IHAVE一些問題:
我如何讓QProcess中沉默? 如果有一個新版本,我如何顯示從該進程開始的窗口通知(我的意思是我已經在Game.exe中創建了該進程,我想從Updater發送一個通知到Game.exe。 exe有新版本可用。)
感謝您的答案。
嗯,我一直在尋找如何做一個谷歌自動更新,但沒有成功。自動更新程序示例
我會計劃是建立一個更新(另一個exe文件被稱爲QProcess中,雖然主要的exe文件),但這裏IHAVE一些問題:
我如何讓QProcess中沉默? 如果有一個新版本,我如何顯示從該進程開始的窗口通知(我的意思是我已經在Game.exe中創建了該進程,我想從Updater發送一個通知到Game.exe。 exe有新版本可用。)
感謝您的答案。
首先,我從來沒有遇到需要創建除QThread
之外的其他任何東西來處理我的更新需求。如果一旦用戶更新,您想要在用戶繼續執行主程序時下載,安裝並重新啓動程序,則QProcess
會很有幫助。
當您使用QProcess
,你將不得不依賴於信號readyReadStandardError()
和readyReadStandardOutput()
(不過這都可以用一個shell腳本,Python腳本,甚至BAT文件來實現)。然後,您的進程正在調用的應用程序應將其輸出發送至stderr或stdout。 Updater.exe應寫入這些文件中的任何一個。
我想象你的更新器使用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將是一個完全成熟的GUI應用程序,不叫show()
方法,除非它的需要,它應該似乎在後臺運行。我更喜歡劇本,但你認識我。
然後你的Game.exe將設置QProcess
。您可以將參數傳遞給QProcess::start()
函數中的過程。
很好的理由,這將有助於引導你的更新過程將是:
終於,在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
}
}
您需要*進程間通信*,Qt有一個D-Bus類的集合,對此很有幫助。 – cmannett85 2011-12-17 10:25:14