更新自己的Qt应用程序



我正在linux上工作。我写了一个小的Qt应用程序,它本身应该安装新版本的应用程序(软件更新(。单击Ui中的重新启动按钮时,应使用更新的版本重新启动。

为此,我应用了以下逻辑:

QDir sourceDir("/Desktop/FileTransferDemo");
QDir currentDir(QDir::currentPath());
QProcess copying;
QStringList arg;
arg.append(sourceDir.filePath("CopyAndRestore_v2"));
arg.append(currentDir.path());
copying.start("cp",arg);
if (copying.waitForFinished(12000) == true)
{
if (copying.exitCode() == 0)
{
}
}
QFile app(currentDir.filePath("CopyAndRestore"));
app.remove();
QFile newApp(currentDir.filePath("CopyAndRestore_v2"));
newApp.rename("CopyAndRestore");

即,在同一路径复制新的exe,删除旧的exe并重命名新的。这里CopyAndRestore是我的旧exe,CopyAndRestore_v2是新exe。重命名新的exe后,点击带有以下代码的重新启动按钮:

on_restartButton_clicked()
{
QProcess::startDetached(QCoreApplication::applicationFilePath());
qApp->quit();
}

我希望应用程序应该以新版本重新启动。Bt它没有重新启动。这种方法正确吗?请为预期产出提出解决方案。

我建议采用以下程序:

  • 用户启动mytool[.exe]
  • mytool[.exe]下载更新,对其进行验证并将其解压缩为mytool_new[.exe
  • 使其可执行(QFile::setPermissions(..(类似于chmod 755(
  • 使用QProcess运行新程序并终止
  • 新进程检查其名称(args[0](以确定其中间状态。然后它将自己复制到原始位置
  • 新进程使用QProcess从原始位置运行并终止

->您正在运行文件的更新版本。

(我认为Qt维护工具就是这样做的(

最新更新