From f395d654ead7791baf800626f2b6ec61eda2cf49 Mon Sep 17 00:00:00 2001 From: shenmo Date: Sun, 5 Apr 2026 10:26:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(aptss):=20=E6=B7=BB=E5=8A=A0aptss=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E5=AD=98=E5=9C=A8=E6=80=A7=E6=A3=80=E6=9F=A5=E5=B9=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81apm=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在运行aptss相关操作前检查命令是否存在,避免错误执行 同时添加对apm命令的支持,当aptss不存在时尝试使用apm更新 --- spark-update-tool/src/aptssupdater.cpp | 11 ++- spark-update-tool/src/mainwindow.cpp | 93 +++++++++++++++++++------- 2 files changed, 78 insertions(+), 26 deletions(-) diff --git a/spark-update-tool/src/aptssupdater.cpp b/spark-update-tool/src/aptssupdater.cpp index 6a352757..3946a9d2 100644 --- a/spark-update-tool/src/aptssupdater.cpp +++ b/spark-update-tool/src/aptssupdater.cpp @@ -16,9 +16,18 @@ aptssUpdater::aptssUpdater(QWidget *parent) QStringList aptssUpdater::getUpdateablePackages() { QStringList packageDetails; + + // 检查aptss命令是否存在 + QProcess checkProcess; + checkProcess.start("which", QStringList() << "aptss"); + if (!checkProcess.waitForFinished(5000) || checkProcess.exitCode() != 0) { + qDebug() << "aptss命令不存在,跳过Spark更新检查"; + return packageDetails; + } + QProcess process; QString command = R"(env LANGUAGE=en_US /usr/bin/apt -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf list --upgradable -o Dir::Etc::sourcelist="/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/aptss.list" -o Dir::Etc::sourceparts="/dev/null" -o APT::Get::List-Cleanup="0" | awk 'NR>1')"; - + process.start("bash", QStringList() << "-c" << command); if (!process.waitForFinished(30000)) { // 30秒超时 qWarning() << "Process failed to finish within 30 seconds."; diff --git a/spark-update-tool/src/mainwindow.cpp b/spark-update-tool/src/mainwindow.cpp index f2cf74e7..491705b3 100644 --- a/spark-update-tool/src/mainwindow.cpp +++ b/spark-update-tool/src/mainwindow.cpp @@ -313,33 +313,76 @@ void MainWindow::filterAppsByKeyword(const QString &keyword) void MainWindow::runAptssUpgrade() { - QProcess process; - - // 检查是否已经是root用户,如果是则直接执行命令,否则使用sudo - if (geteuid() == 0) { - // root用户直接执行 - process.start("aptss", QStringList() << "ssupdate"); + // 检查aptss命令是否存在 + QProcess checkProcess; + checkProcess.start("which", QStringList() << "aptss"); + if (checkProcess.waitForFinished(5000) && checkProcess.exitCode() == 0) { + // aptss存在,执行aptss ssupdate + QProcess process; + + // 检查是否已经是root用户,如果是则直接执行命令,否则使用sudo + if (geteuid() == 0) { + // root用户直接执行 + process.start("aptss", QStringList() << "ssupdate"); + } else { + // 非root用户使用sudo + process.start("sudo", QStringList() << "aptss" << "ssupdate"); + } + + if (!process.waitForStarted(5000)) { + QMessageBox::warning(this, "升级失败", "无法启动 aptss ssupdate"); + return; + } + process.write("n\n"); + process.closeWriteChannel(); + + // 设置超时时间,避免无限等待 + if (!process.waitForFinished(30000)) { // 30秒超时 + qDebug() << "aptss ssupdate 执行超时"; + process.kill(); // 强制终止进程 + return; + } + + if (process.exitCode() != 0) { + QMessageBox::warning(this, "升级失败", "执行 aptss ssupdate 失败,请检查系统环境或稍后再试。"); + } } else { - // 非root用户使用sudo - process.start("sudo", QStringList() << "aptss" << "ssupdate"); + qDebug() << "aptss命令不存在,跳过aptss ssupdate"; } - - if (!process.waitForStarted(5000)) { - QMessageBox::warning(this, "升级失败", "无法启动 aptss ssupdate"); - return; - } - process.write("n\n"); - process.closeWriteChannel(); - - // 设置超时时间,避免无限等待 - if (!process.waitForFinished(30000)) { // 30秒超时 - qDebug() << "aptss ssupdate 执行超时"; - process.kill(); // 强制终止进程 - return; - } - - if (process.exitCode() != 0) { - QMessageBox::warning(this, "升级失败", "执行 aptss ssupdate 失败,请检查系统环境或稍后再试。"); + + // 检查apm命令是否存在,如果存在则执行apm update + QProcess checkApmProcess; + checkApmProcess.start("which", QStringList() << "apm"); + if (checkApmProcess.waitForFinished(5000) && checkApmProcess.exitCode() == 0) { + qDebug() << "apm命令存在,执行apm update"; + QProcess apmProcess; + + // 检查是否已经是root用户,如果是则直接执行命令,否则使用sudo + if (geteuid() == 0) { + // root用户直接执行 + apmProcess.start("apm", QStringList() << "update"); + } else { + // 非root用户使用sudo + apmProcess.start("sudo", QStringList() << "apm" << "update"); + } + + if (!apmProcess.waitForStarted(5000)) { + qDebug() << "无法启动 apm update"; + return; + } + + // 设置超时时间,避免无限等待 + if (!apmProcess.waitForFinished(30000)) { // 30秒超时 + qDebug() << "apm update 执行超时"; + apmProcess.kill(); // 强制终止进程 + return; + } + + if (apmProcess.exitCode() != 0) { + qDebug() << "执行 apm update 失败"; + } + } else { + qDebug() << "apm命令不存在,跳过apm update"; } } void MainWindow::closeEvent(QCloseEvent *event)