嗯,我一直在寻找如何做一个谷歌自动更新,但没有成功。自动更新程序示例
我会计划是建立一个更新(另一个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