From 2257b3943c973497fc6dbf06ac4f713fbc68364f Mon Sep 17 00:00:00 2001 From: momen Date: Sun, 5 Oct 2025 02:34:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:root=E8=B4=A6=E6=88=B7=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=8D=A1=E6=AD=BB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/aptssupdater.cpp | 9 ++++++--- src/mainwindow.cpp | 18 +++++++++++++----- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/aptssupdater.cpp b/src/aptssupdater.cpp index 60e697a..2ba3f33 100644 --- a/src/aptssupdater.cpp +++ b/src/aptssupdater.cpp @@ -69,7 +69,6 @@ QStringList aptssUpdater::getUpdateablePackages() QStringList aptssUpdater::getPackageSizes() { QStringList packageDetails; - QProcess process; // 获取可更新包名列表 QStringList updateablePackages; @@ -78,6 +77,8 @@ QStringList aptssUpdater::getPackageSizes() } foreach (const QString &packageName, updateablePackages) { + QProcess process; // 在循环内部创建新的QProcess实例 + // 构建新命令(包含包名参数) QString command = QString("apt download %1 --print-uris -c /opt/durapps/spark-store/bin/apt-fast-conf/aptss-apt.conf " "-o Dir::Etc::sourcelist=\"/opt/durapps/spark-store/bin/apt-fast-conf/sources.list.d/sparkstore.list\" " @@ -118,7 +119,6 @@ QStringList aptssUpdater::getPackageSizes() QStringList aptssUpdater::getDesktopAppNames() { QStringList appNames; - QProcess dpkgProcess; // 获取当前系统语言环境 QString lang = QLocale().name().replace("_", "-"); @@ -127,6 +127,8 @@ QStringList aptssUpdater::getDesktopAppNames() QStringList packages = packageName; foreach (const QString &package, packages) { + QProcess dpkgProcess; // 在循环内部创建新的QProcess实例 + QString packageName = package.split(":")[0]; QString finalName = packageName; // 默认使用包名 @@ -231,12 +233,13 @@ bool aptssUpdater::checkDesktopFiles(const QStringList &desktopFiles, QString &a QStringList aptssUpdater::getPackageIcons() { QStringList packageIcons; - QProcess dpkgProcess; // 遍历所有可更新包 QStringList packages = packageName; foreach (const QString &package, packages) { + QProcess dpkgProcess; // 在循环内部创建新的QProcess实例 + QString packageName = package.split(":")[0]; QString iconPath = ":/resources/default_icon.svg"; // 默认图标 diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1b333ff..e2801ac 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -7,6 +7,7 @@ #include // 新增 #include #include +#include // for geteuid MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) @@ -262,11 +263,18 @@ void MainWindow::filterAppsByKeyword(const QString &keyword) void MainWindow::runAptssUpgrade() { QProcess process; - QStringList args; - args << "sudo" <<"aptss" << "ssupdate"; - process.start("sudo", args); + + // 检查是否已经是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, "升级失败", "无法启动 sudo aptss ssupdate"); + QMessageBox::warning(this, "升级失败", "无法启动 aptss ssupdate"); return; } process.write("n\n"); @@ -280,7 +288,7 @@ void MainWindow::runAptssUpgrade() } if (process.exitCode() != 0) { - QMessageBox::warning(this, "升级失败", "执行 sudo aptss ssupdate 失败,请检查系统环境或稍后再试。"); + QMessageBox::warning(this, "升级失败", "执行 aptss ssupdate 失败,请检查系统环境或稍后再试。"); } } void MainWindow::closeEvent(QCloseEvent *event)