fix:root账户更新卡死的问题

This commit is contained in:
2025-10-05 02:34:30 +08:00
parent a285c02cc9
commit 2257b3943c
2 changed files with 19 additions and 8 deletions

View File

@@ -69,7 +69,6 @@ QStringList aptssUpdater::getUpdateablePackages()
QStringList aptssUpdater::getPackageSizes() QStringList aptssUpdater::getPackageSizes()
{ {
QStringList packageDetails; QStringList packageDetails;
QProcess process;
// 获取可更新包名列表 // 获取可更新包名列表
QStringList updateablePackages; QStringList updateablePackages;
@@ -78,6 +77,8 @@ QStringList aptssUpdater::getPackageSizes()
} }
foreach (const QString &packageName, updateablePackages) { 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 " 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\" " "-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 aptssUpdater::getDesktopAppNames()
{ {
QStringList appNames; QStringList appNames;
QProcess dpkgProcess;
// 获取当前系统语言环境 // 获取当前系统语言环境
QString lang = QLocale().name().replace("_", "-"); QString lang = QLocale().name().replace("_", "-");
@@ -127,6 +127,8 @@ QStringList aptssUpdater::getDesktopAppNames()
QStringList packages = packageName; QStringList packages = packageName;
foreach (const QString &package, packages) { foreach (const QString &package, packages) {
QProcess dpkgProcess; // 在循环内部创建新的QProcess实例
QString packageName = package.split(":")[0]; QString packageName = package.split(":")[0];
QString finalName = packageName; // 默认使用包名 QString finalName = packageName; // 默认使用包名
@@ -231,12 +233,13 @@ bool aptssUpdater::checkDesktopFiles(const QStringList &desktopFiles, QString &a
QStringList aptssUpdater::getPackageIcons() QStringList aptssUpdater::getPackageIcons()
{ {
QStringList packageIcons; QStringList packageIcons;
QProcess dpkgProcess;
// 遍历所有可更新包 // 遍历所有可更新包
QStringList packages = packageName; QStringList packages = packageName;
foreach (const QString &package, packages) { foreach (const QString &package, packages) {
QProcess dpkgProcess; // 在循环内部创建新的QProcess实例
QString packageName = package.split(":")[0]; QString packageName = package.split(":")[0];
QString iconPath = ":/resources/default_icon.svg"; // 默认图标 QString iconPath = ":/resources/default_icon.svg"; // 默认图标

View File

@@ -7,6 +7,7 @@
#include <QFutureWatcher> // 新增 #include <QFutureWatcher> // 新增
#include <QIcon> #include <QIcon>
#include <qicon.h> #include <qicon.h>
#include <unistd.h> // for geteuid
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
, ui(new Ui::MainWindow) , ui(new Ui::MainWindow)
@@ -262,11 +263,18 @@ void MainWindow::filterAppsByKeyword(const QString &keyword)
void MainWindow::runAptssUpgrade() void MainWindow::runAptssUpgrade()
{ {
QProcess process; QProcess process;
QStringList args;
args << "sudo" <<"aptss" << "ssupdate"; // 检查是否已经是root用户如果是则直接执行命令否则使用sudo
process.start("sudo", args); if (geteuid() == 0) {
// root用户直接执行
process.start("aptss", QStringList() << "ssupdate");
} else {
// 非root用户使用sudo
process.start("sudo", QStringList() << "aptss" << "ssupdate");
}
if (!process.waitForStarted(5000)) { if (!process.waitForStarted(5000)) {
QMessageBox::warning(this, "升级失败", "无法启动 sudo aptss ssupdate"); QMessageBox::warning(this, "升级失败", "无法启动 aptss ssupdate");
return; return;
} }
process.write("n\n"); process.write("n\n");
@@ -280,7 +288,7 @@ void MainWindow::runAptssUpgrade()
} }
if (process.exitCode() != 0) { if (process.exitCode() != 0) {
QMessageBox::warning(this, "升级失败", "执行 sudo aptss ssupdate 失败,请检查系统环境或稍后再试。"); QMessageBox::warning(this, "升级失败", "执行 aptss ssupdate 失败,请检查系统环境或稍后再试。");
} }
} }
void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::closeEvent(QCloseEvent *event)