2

さて、Googleで自動アップデーターを実行する方法を探していましたが、成功しませんでした。

私が計画しているのは、アップデーター (プリンシパル exe を介して QProcess によって呼び出される別の exe) を作成することですが、ここでいくつか質問があります。

QProcess をサイレントにするにはどうすればよいですか? 新しいバージョンがある場合、プロセスが開始されたウィンドウに通知を表示するにはどうすればよいですか (つまり、Game.exe でプロセスを作成したということです。Updater.exe から Game.exe に通知を送信したいのです)。新しいバージョンが利用可能であることを確認してください。)

答えてくれてありがとう。

4

1 に答える 1

0

QThreadまず、更新のニーズを処理するために、以外のものを作成する必要に遭遇したことはありません。これQProcessは、ユーザーが更新した後、ユーザーがメインプログラムを続行している間にプログラムをダウンロード、インストール、および再起動する場合に役立ちます。(ただし、これはすべて、シェルスクリプト、Pythonスクリプト、さらにはBATファイルを使用して実現できます)

を使用する場合は、シグナルとQProcessに依存する必要があります。次に、プロセスが呼び出しているアプリケーションは、その出力をstderrまたはstdoutに送信する必要があります。Updater.exeは、これらのファイルのいずれかに書き込む必要があります。readyReadStandardError()readyReadStandardOutput()

私はあなたのアップデーターがを利用することを想像します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のバージョン番号
  • "更新を確認する"
  • 「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
    }
}
于 2012-02-22T16:05:53.937 に答える