From ef2bc1189aff526de7df57d64676a3935dd40fd5 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Fri, 22 Jul 2022 11:12:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=89=E8=A3=85=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E4=B8=8E=E5=90=A6=E7=9A=84=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/upgrade/HGUpgrade.cpp | 30 ------------------------ app/upgrade/HGUpgrade.h | 3 --- app/upgrade/main.cpp | 14 +++++++++-- app/upgrade/mainwindow.cpp | 48 ++++++++++++++++++++++++++++++++++++-- app/upgrade/mainwindow.h | 5 ++++ 5 files changed, 63 insertions(+), 37 deletions(-) diff --git a/app/upgrade/HGUpgrade.cpp b/app/upgrade/HGUpgrade.cpp index 8dba1d47..89c40948 100644 --- a/app/upgrade/HGUpgrade.cpp +++ b/app/upgrade/HGUpgrade.cpp @@ -129,36 +129,6 @@ bool AppIsRun(const std::string& appName) return false; } -bool Upgrade(const std::string& pkgPath) -{ - bool ret = false; - -#if defined(HG_CMP_MSC) - - PROCESS_INFORMATION ProcessInfo; - STARTUPINFOA StartupInfo; - ZeroMemory(&StartupInfo, sizeof(StartupInfo)); - StartupInfo.cb = sizeof(StartupInfo); - - char command[256]; - sprintf(command, "%s %s", pkgPath.c_str(), "/verysilent"); - if (CreateProcessA(nullptr, command, nullptr, nullptr, FALSE, 0, nullptr, nullptr, &StartupInfo, &ProcessInfo)) - { - WaitForSingleObject(ProcessInfo.hProcess, INFINITE); - CloseHandle(ProcessInfo.hThread); - CloseHandle(ProcessInfo.hProcess); - ret = true; - } - -#else - std::string cmd = "pkexec dpkg -i \"" + pkgPath + "\""; - if (0 == system(cmd.c_str())) - ret = true; -#endif - - return ret; -} - void RunApp(const std::string& appName) { if (appName == HGVERSION_APPNAME_SCANNER) diff --git a/app/upgrade/HGUpgrade.h b/app/upgrade/HGUpgrade.h index 37bb4dfe..67f7e533 100644 --- a/app/upgrade/HGUpgrade.h +++ b/app/upgrade/HGUpgrade.h @@ -6,9 +6,6 @@ // 判断app是否在运行 bool AppIsRun(const std::string& appName); -// 升级安装, 使用之前的安装路径 -bool Upgrade(const std::string& pkgPath); - // 运行app void RunApp(const std::string& appName); diff --git a/app/upgrade/main.cpp b/app/upgrade/main.cpp index b910ffd6..cc64de99 100644 --- a/app/upgrade/main.cpp +++ b/app/upgrade/main.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "version/HGVersion.h" #include "HGUpgrade.h" @@ -65,8 +66,17 @@ int main(int argc, char *argv[]) w.show(); a.exec(); - if (!AppIsRun(appName)) - RunApp(appName); + if (w.isInstallSuccess()) + { + QMessageBox::information(nullptr, QObject::tr("tip"), QObject::tr("install succeed!")); + + if (!AppIsRun(appName)) + RunApp(appName); + } + else + { + QMessageBox::critical(nullptr, QObject::tr("error"), QObject::tr("install failed!")); + } } return 0; diff --git a/app/upgrade/mainwindow.cpp b/app/upgrade/mainwindow.cpp index ef5cb365..4ea91308 100644 --- a/app/upgrade/mainwindow.cpp +++ b/app/upgrade/mainwindow.cpp @@ -1,8 +1,14 @@ #include "mainwindow.h" #include "ui_mainwindow.h" -#include "HGUpgrade.h" +#include "base/HGDef.h" +#include "base/HGInc.h" #include #include +#include +#if defined(HG_CMP_MSC) +#include +#include +#endif MainWindow::MainWindow(const std::string &appName, const std::string& pkgPath, QWidget *parent) : QMainWindow(parent) @@ -10,6 +16,7 @@ MainWindow::MainWindow(const std::string &appName, const std::string& pkgPath, Q , m_appName(appName) , m_pkgPath(pkgPath) , m_thread(nullptr) + , m_success(false) { ui->setupUi(this); @@ -38,11 +45,48 @@ MainWindow::~MainWindow() delete ui; } +bool MainWindow::isInstallSuccess() +{ + return m_success; +} + +bool MainWindow::Upgrade(const std::string& pkgPath) +{ + bool ret = false; + +#if defined(HG_CMP_MSC) + + PROCESS_INFORMATION ProcessInfo; + STARTUPINFOA StartupInfo; + ZeroMemory(&StartupInfo, sizeof(StartupInfo)); + StartupInfo.cb = sizeof(StartupInfo); + + char command[256]; + sprintf(command, "%s %s", pkgPath.c_str(), "/verysilent"); + if (CreateProcessA(nullptr, command, nullptr, nullptr, FALSE, 0, nullptr, nullptr, &StartupInfo, &ProcessInfo)) + { + WaitForSingleObject(ProcessInfo.hProcess, INFINITE); + DWORD dwCode = 0; + GetExitCodeProcess(ProcessInfo.hProcess, &dwCode); + CloseHandle(ProcessInfo.hThread); + CloseHandle(ProcessInfo.hProcess); + ret = (0 == dwCode); + } + +#else + std::string cmd = "pkexec dpkg -i \"" + pkgPath + "\""; + if (0 == system(cmd.c_str())) + ret = true; +#endif + + return ret; +} + void MainWindow::ThreadFunc(HGThread thread, HGPointer param) { (void)thread; MainWindow* p = (MainWindow*)param; - Upgrade(p->m_pkgPath); + p->m_success = p->Upgrade(p->m_pkgPath); emit p->closeWnd(); } diff --git a/app/upgrade/mainwindow.h b/app/upgrade/mainwindow.h index 968fe5b1..8c06f406 100644 --- a/app/upgrade/mainwindow.h +++ b/app/upgrade/mainwindow.h @@ -16,10 +16,14 @@ public: MainWindow(const std::string &appName, const std::string &pkgPath, QWidget *parent = nullptr); ~MainWindow(); + bool isInstallSuccess(); + signals: void closeWnd(); + void upgradeResult(); private: + bool Upgrade(const std::string& pkgPath); static void ThreadFunc(HGThread thread, HGPointer param); private: @@ -28,5 +32,6 @@ private: std::string m_appName; std::string m_pkgPath; HGThread m_thread; + bool m_success; }; #endif // MAINWINDOW_H