From cf0d107434e2d1b8726412c907c3b44549478450 Mon Sep 17 00:00:00 2001 From: shi_jq Date: Thu, 13 Mar 2025 11:50:23 +0800 Subject: [PATCH] =?UTF-8?q?[ref]=E5=90=8C=E6=AD=A5711?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/sys_file_sync_api/FilesyncApiImpl.cpp | 3 +- product/src/sys/sys_startup/BrushDataThread.h | 2 +- product/src/sys/sys_startup/DogCheck.cpp | 71 +- product/src/sys/sys_startup/DogCheck.h | 2 + product/src/sys/sys_startup/DogCheck.ui | 139 ++- product/src/sys/sys_startup/MainWindow.cpp | 7 +- product/src/sys/sys_startup/SetupFunc.h | 2 +- .../src/sys/sys_startup/SetupFuncLinux.cpp | 40 +- .../src/sys/sys_startup/SetupFuncWindows.cpp | 31 +- product/src/sys/sys_startup/VersionForm.cpp | 18 +- product/src/sys/sys_startup/auto_start.ico | Bin 4286 -> 4286 bytes product/src/sys/sys_startup/db_check.ico | Bin 4286 -> 4286 bytes .../src/sys/sys_startup/dog_auth_check.ico | Bin 4286 -> 4286 bytes product/src/sys/sys_startup/en.ts | 1042 +++++++++++++++++ product/src/sys/sys_startup/sys_startup.ico | Bin 4286 -> 16958 bytes product/src/sys/sys_startup/sys_startup.pro | 11 + 16 files changed, 1254 insertions(+), 114 deletions(-) create mode 100644 product/src/sys/sys_startup/en.ts diff --git a/product/src/sys/sys_file_sync_api/FilesyncApiImpl.cpp b/product/src/sys/sys_file_sync_api/FilesyncApiImpl.cpp index 6bff6343..5badb9bc 100644 --- a/product/src/sys/sys_file_sync_api/FilesyncApiImpl.cpp +++ b/product/src/sys/sys_file_sync_api/FilesyncApiImpl.cpp @@ -203,6 +203,7 @@ bool FilesyncApiImpl::recvSvrMsg(iot_net::CMbMessage &msg) if (!dataMsg.ParseFromArray(msg.getDataPtr(), (int)msg.getDataSize())) { + BOOST_ASSERT(false); return false; } return handleFileNodeRespMsg(dataMsg); @@ -213,7 +214,7 @@ bool FilesyncApiImpl::recvSvrMsg(iot_net::CMbMessage &msg) if (!resultMsg.ParseFromArray(msg.getDataPtr(), (int)msg.getDataSize())) { - // BOOST_ASSERT(false); + BOOST_ASSERT(false); return false; } return handleBroadcastResultMsg(resultMsg); diff --git a/product/src/sys/sys_startup/BrushDataThread.h b/product/src/sys/sys_startup/BrushDataThread.h index da9cb5ba..b2a80176 100644 --- a/product/src/sys/sys_startup/BrushDataThread.h +++ b/product/src/sys/sys_startup/BrushDataThread.h @@ -56,7 +56,7 @@ public: * @brief initialize 初始化网络查询 * @param domainId 连接域 * @param appId 连接应用 - * @return iotSuccess-成功 kbdFaild-失败 + * @return iotSuccess-成功 iotFailed-失败 */ int initialize(int domainId,int appId); diff --git a/product/src/sys/sys_startup/DogCheck.cpp b/product/src/sys/sys_startup/DogCheck.cpp index bfba9fa7..f7847f38 100644 --- a/product/src/sys/sys_startup/DogCheck.cpp +++ b/product/src/sys/sys_startup/DogCheck.cpp @@ -1,6 +1,11 @@ #include "DogCheck.h" #include "ui_DogCheck.h" #include "sys_dog_auth_api/DogAuthInterface.h" +#include +#include +#include +#include +#include using namespace iot_sys; DogCheck::DogCheck(QWidget *parent) : @@ -13,6 +18,9 @@ DogCheck::DogCheck(QWidget *parent) : slot_recheckBtn(); ui->recheckBtn->setText(tr("重新检测")); connect(ui->recheckBtn, &QPushButton::clicked, this, &DogCheck::slot_recheckBtn); + connect(ui->pushButton_2,&QPushButton::clicked,this,&DogCheck::slot_openLicenseDir); + connect(ui->pushButton,&QPushButton::clicked,this,&DogCheck::slot_selectLicense); + } DogCheck::~DogCheck() @@ -23,18 +31,65 @@ DogCheck::~DogCheck() void DogCheck::slot_recheckBtn() { CDogAuthInterfacePtr ptrDogAuth = getDogAuthInstance(); - int nRet = ptrDogAuth->checkAuthStatus(); - if (nRet == AUTH_STATUS_OK) + if (nRet > 0) { - ui->statusLab->setText(tr("正常")); - } - else if(nRet == AUTH_STATUS_EXPIRED) - { - ui->statusLab->setText(tr("授权过期,错误码[%1]").arg(nRet)); + + ui->statusLab->setText(tr("异常,错误码[%1]").arg(nRet)); } else { - ui->statusLab->setText(tr("异常,错误码[%1]").arg(nRet)); + ui->statusLab->setText(tr("正常")); } } + +void DogCheck::slot_openLicenseDir() +{ + QString strDir = QCoreApplication::applicationDirPath(); + QString licenseDir = QString("%1/../common/license/").arg(strDir); + if(!QFileInfo::exists(licenseDir)) + { + + } + QDesktopServices::openUrl(QUrl::fromLocalFile(licenseDir)); +} + +void DogCheck::slot_selectLicense() +{ + QString strBinDir = QCoreApplication::applicationDirPath(); + QString licenseFile = QString("%1/../common/license/license.txt").arg(strBinDir); + + QFile destFile(licenseFile); + if(destFile.exists()) + { + if(!destFile.remove()) + { + QMessageBox::warning(this, tr("提示"), QString("删除原文件失败")); + return ; + } + } + + QFileDialog fileDialog; + QString strDir = fileDialog.getOpenFileName(this, tr("选择授权文件"),"license.txt",tr("txt (*.txt)")); + + if (strDir.isEmpty()) + { + return ; + } + + QFile sourceFile(strDir); + if (!sourceFile.exists()) { + QMessageBox::warning(this, tr("提示"), QString("文件不存在")); + return ; + } + + bool ret = sourceFile.copy(licenseFile); + if(!ret) + { + QMessageBox::warning(this, tr("提示"), QString("导入失败![%1]").arg(sourceFile.errorString())); + return; + } + + + QMessageBox::warning(this, tr("提示"), QString("导入成功!")); +} diff --git a/product/src/sys/sys_startup/DogCheck.h b/product/src/sys/sys_startup/DogCheck.h index 4b1fae42..78ef0095 100644 --- a/product/src/sys/sys_startup/DogCheck.h +++ b/product/src/sys/sys_startup/DogCheck.h @@ -16,6 +16,8 @@ public: ~DogCheck(); private slots: void slot_recheckBtn(); + void slot_openLicenseDir(); + void slot_selectLicense(); private: Ui::DogCheck *ui; }; diff --git a/product/src/sys/sys_startup/DogCheck.ui b/product/src/sys/sys_startup/DogCheck.ui index d412bae0..05fc5ded 100644 --- a/product/src/sys/sys_startup/DogCheck.ui +++ b/product/src/sys/sys_startup/DogCheck.ui @@ -2,26 +2,6 @@ DogCheck - - - 0 - 0 - 234 - 166 - - - - - 234 - 166 - - - - - 234 - 166 - - Dialog @@ -31,6 +11,19 @@ + + + Qt::Vertical + + + + 20 + 27 + + + + + QFrame::StyledPanel @@ -38,43 +31,79 @@ QFrame::Raised - - - - 10 - 40 - 191 - 20 - - - - - - - Qt::AlignCenter - - - - - - 67 - 90 - 75 - 23 - - - - - 0 - 0 - - - - - - + + + + + + + 加密狗状态: + + + + + + + 正常 + + + + + + + 重新检测 + + + + + + + + + 1、请将操作系统信息(re_code.txt)发给系统提供商,获取授权文件 + + + true + + + + + + + 拷贝操作系统信息 + + + + + + + 2、获取授权文件后,进行系统激活 + + + + + + + 导入授权文件 + + + + + + + + Qt::Vertical + + + + 20 + 28 + + + + diff --git a/product/src/sys/sys_startup/MainWindow.cpp b/product/src/sys/sys_startup/MainWindow.cpp index acb9a7be..b19b4d56 100644 --- a/product/src/sys/sys_startup/MainWindow.cpp +++ b/product/src/sys/sys_startup/MainWindow.cpp @@ -1077,6 +1077,10 @@ void MainWindow::tabWidget_currentIdxChanged(int /*index*/) void MainWindow::closeEvent(QCloseEvent *event) { +#ifdef KBD_ARM + QApplication::exit(0); +#endif + event->ignore(); this->hide(); LOGINFO("点击应用关闭按钮,停止工作!"); @@ -1199,7 +1203,7 @@ void MainWindow::checkDog() m_pStatusMng->dogUncheck(); return ; } - if(AUTH_STATUS_FAILD == m_ptrDogAuthApi->checkAuthStatus()) //加密狗失败退出(含过期超过3个月) + if(iotSuccess != m_ptrDogAuthApi->checkAuthStatus()) { m_pStatusMng->dogIsNotHave(); if(m_bLastDogStatus == true) @@ -1233,6 +1237,7 @@ void MainWindow::verifyIp() void MainWindow::updateVerifyIp(int verifyValue) { + return;//暂时不写sys_ctrl文件,一直写这个文件会存在问题, 在linux系统下,突然断电会经常导致此文件损坏 QString path = iot_public::CFileUtil::getPathOfCfgFile("sys_ctrl.xml",CN_DIR_PLATFORM).c_str(); QFile file(path); if(!file.open(QFile::ReadOnly)) diff --git a/product/src/sys/sys_startup/SetupFunc.h b/product/src/sys/sys_startup/SetupFunc.h index 1a6ae4a2..3c8596da 100644 --- a/product/src/sys/sys_startup/SetupFunc.h +++ b/product/src/sys/sys_startup/SetupFunc.h @@ -52,5 +52,5 @@ bool unsetSysStartupAutoStartByVbs(QString &strErr); //-------------------------------------- -} //< iot_sys +} //< namespace iot_sys diff --git a/product/src/sys/sys_startup/SetupFuncLinux.cpp b/product/src/sys/sys_startup/SetupFuncLinux.cpp index c49afa2b..3c128872 100644 --- a/product/src/sys/sys_startup/SetupFuncLinux.cpp +++ b/product/src/sys/sys_startup/SetupFuncLinux.cpp @@ -13,21 +13,15 @@ #include #include "pub_utility_api/FileUtil.h" #include "SetupFunc.h" +#include "setup/CommonDef.h" namespace iot_sys { -static const char *pszSystemdCfgFile = "/tmp/iscs6000_launcher.service"; - -//< 前面需加上用户HOME目录路径 -static const char *pszXdgCfgDir = "/.config/autostart/"; -static const char *pszXdgCfgFile = "iscs6000_hmi_explorer.desktop"; - - //< 注册系统服务,并设置自启动 bool regSysService(QString &strErr) { //< 判断服务是否已注册,普通用户权限可执行 - if (0 == QProcess::execute("systemctl is-enabled iscs6000_launcher.service")) + if (0 == QProcess::execute(QString("systemctl is-enabled %1.service").arg(g_pszLauncherServiceName) )) { strErr = QObject::tr("已设置服务自启动,若需重新设置,请先取消!"); return false; @@ -58,14 +52,14 @@ bool regSysService(QString &strErr) //< 生成或修改systemd服务配置文件 { - QSettings objIniSetting(pszSystemdCfgFile, QSettings::IniFormat); + QSettings objIniSetting(g_pszLauncherServiceTempFile, QSettings::IniFormat); objIniSetting.setIniCodec( QTextCodec::codecForLocale() ); qDebug() << objIniSetting.iniCodec()->name(); if (!objIniSetting.isWritable()) { strErr = QObject::tr("服务配置文件不可写,请确认是否具有权限!") - + "\n" + pszSystemdCfgFile; + + "\n" + g_pszLauncherServiceTempFile; return false; } @@ -74,7 +68,7 @@ bool regSysService(QString &strErr) objIniSetting.clear(); objIniSetting.beginGroup("Unit"); - objIniSetting.setValue("Description", "iscs6000_launcher"); + objIniSetting.setValue("Description", g_pszLauncherServiceName); objIniSetting.setValue("After", "network.target"); objIniSetting.endGroup(); @@ -99,13 +93,14 @@ bool regSysService(QString &strErr) if (QSettings::NoError != objIniSetting.status()) { strErr = QObject::tr("写入服务配置文件失败!") - + "\n" + pszSystemdCfgFile; + + "\n" + g_pszLauncherServiceTempFile; return false; } } //< 设置服务开机自启动 - if (0 != system("pkexec bash -c 'cp -f /tmp/iscs6000_launcher.service /usr/lib/systemd/system/ && systemctl daemon-reload && systemctl enable iscs6000_launcher'")) + QString strRegSvrShell = QString("pkexec bash -c 'cp -f %1 %2 && systemctl daemon-reload && systemctl enable %3'").arg(g_pszLauncherServiceTempFile).arg(g_pszLauncherServiceFile).arg(g_pszLauncherServiceName); + if (0 != system(strRegSvrShell.toStdString().c_str())) { strErr = QObject::tr("设置服务开机自启动失败!"); return false; @@ -116,7 +111,8 @@ bool regSysService(QString &strErr) //< 注销系统服务 bool unregSysService(QString &strErr) { - if (0 != system("pkexec bash -c 'systemctl enable iscs6000_launcher && systemctl disable iscs6000_launcher'")) + QString strUnRegSvrShell = QString("pkexec bash -c 'systemctl enable %1 && systemctl disable %1'").arg(g_pszLauncherServiceName); + if (0 != system(strUnRegSvrShell.toStdString().c_str())) { strErr = QObject::tr("取消服务开机自启动失败!"); return false; @@ -129,7 +125,7 @@ bool unregSysService(QString &strErr) bool isSysService(QString &strErr) { //< 判断服务是否已注册,普通用户权限可执行 - if (0 == QProcess::execute("systemctl is-enabled iscs6000_launcher.service")) + if (0 == QProcess::execute(QString("systemctl is-enabled %1.service").arg(g_pszLauncherServiceName) )) { strErr = QObject::tr("已设置服务自启动,若需重新设置,请先取消!"); return true; @@ -145,9 +141,9 @@ bool setHmiAutoStart(QString &strErr) { const QString strCfgFileDir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) - + pszXdgCfgDir; + + g_pszXdgAutoStartCfgDir; - const QString strCfgFileFullPath = strCfgFileDir + pszXdgCfgFile; + const QString strCfgFileFullPath = strCfgFileDir + g_pszHMIXdgDesktopCfgFile; if (QFile::exists(strCfgFileFullPath)) { @@ -207,7 +203,7 @@ bool setHmiAutoStart(QString &strErr) { QTextStream objStreamOut(&objFile); objStreamOut << "[Desktop Entry]" << endl; - objStreamOut << "Name=iscs6000_hmi_explorer" << endl; + objStreamOut << "Name=" << g_pszHMIXdgDesktopName << endl; objStreamOut << "Exec=" << strExec << endl; objStreamOut << "Type=Application" << endl; objStreamOut << "X-GNOME-AutoRestart=false" << endl; @@ -224,7 +220,7 @@ bool unsetHmiAutoStart(QString &strErr) { const QString strCfgFileFullPath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) - + pszXdgCfgDir + pszXdgCfgFile; + + g_pszXdgAutoStartCfgDir + g_pszHMIXdgDesktopCfgFile; if (QFile::exists(strCfgFileFullPath)) { @@ -249,9 +245,9 @@ bool isHmiAutoStart(QString &strErr) { const QString strCfgFileDir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) - + pszXdgCfgDir; + + g_pszXdgAutoStartCfgDir; - const QString strCfgFileFullPath = strCfgFileDir + pszXdgCfgFile; + const QString strCfgFileFullPath = strCfgFileDir + g_pszHMIXdgDesktopCfgFile; if (QFile::exists(strCfgFileFullPath)) { @@ -282,6 +278,6 @@ bool removeShortcut(QString &strErr) } -} //< iot_sys +} //< namespace iot_sys #endif //< #ifdef OS_LINUX diff --git a/product/src/sys/sys_startup/SetupFuncWindows.cpp b/product/src/sys/sys_startup/SetupFuncWindows.cpp index c4f4aa72..5504b73a 100644 --- a/product/src/sys/sys_startup/SetupFuncWindows.cpp +++ b/product/src/sys/sys_startup/SetupFuncWindows.cpp @@ -21,14 +21,11 @@ #include #include "pub_utility_api/FileUtil.h" #include "SetupFunc.h" +#include "setup/CommonDef.h" namespace iot_sys { -static const TCHAR *pszServiceName = _T("iscs6000_launcher"); - -static const char *pszAutoRunRegPath = "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; - //< 注册系统服务,并设置自启动 bool regSysService(QString &strErr) { @@ -52,7 +49,7 @@ bool regSysService(QString &strErr) else { //< 判断服务是否已存在 - SC_HANDLE hService = ::OpenService(hSCM, pszServiceName, SERVICE_QUERY_CONFIG); + SC_HANDLE hService = ::OpenService(hSCM, g_pTCharLauncherServiceName, SERVICE_QUERY_CONFIG); if (NULL == hService) { //< 创建服务 @@ -67,7 +64,7 @@ bool regSysService(QString &strErr) // 20200601 已修改为注册系统服务并验证成功 hService = ::CreateService( - hSCM, pszServiceName, pszServiceName, + hSCM, g_pTCharLauncherServiceName, g_pTCharLauncherServiceName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, strExec.toStdWString().c_str(), NULL, NULL, NULL, NULL, NULL); @@ -79,7 +76,7 @@ bool regSysService(QString &strErr) else { SERVICE_DESCRIPTION stSrvDesc; - TCHAR szDesc[] = _T("宏茂技术监控系统加载服务"); + TCHAR szDesc[] = _T("监控系统加载服务"); stSrvDesc.lpDescription = szDesc; if (::ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &stSrvDesc)) { @@ -114,8 +111,8 @@ bool unregSysService(QString &strErr) } else { - SC_HANDLE hService = ::OpenService(hSCM, pszServiceName, SERVICE_QUERY_STATUS | SERVICE_STOP | DELETE); - //SC_HANDLE hService = ::OpenService(hSCM, _T("iscs6000_launcher_17b5ab7"), SERVICE_QUERY_STATUS | SERVICE_STOP | DELETE); + SC_HANDLE hService = ::OpenService(hSCM, g_pTCharLauncherServiceName, SERVICE_QUERY_STATUS | SERVICE_STOP | DELETE); + //SC_HANDLE hService = ::OpenService(hSCM, _T("xxxx_launcher_17b5ab7"), SERVICE_QUERY_STATUS | SERVICE_STOP | DELETE); if (NULL == hService) { @@ -130,9 +127,9 @@ bool unregSysService(QString &strErr) { //< todo 当使用SERVICE_USER_XXX_PROCESS类型的服务注册时,停止服务存在困难 //< 此情况下服务的真实名称是注册名加上用户会话的ID,而ID是变化的,且微软没有开发获取的方法 - //< 比如真实的服务名是“iscs6000_launcher_17b5ab7”且正在运行,如果查询“iscs6000_launcher”的状态,是停止的 - //< 也无法通过停止“iscs6000_launcher”服务来停止“iscs6000_launcher_17b5ab7” - //< 删除“iscs6000_launcher”服务后,“iscs6000_launcher_17b5ab7”还可见,必须注销重新登录才会消失 + //< 比如真实的服务名是“xxxx_launcher_17b5ab7”且正在运行,如果查询“xxxx_launcher”的状态,是停止的 + //< 也无法通过停止“xxxx_launcher”服务来停止“xxxx_launcher_17b5ab7” + //< 删除“xxxx_launcher”服务后,“xxxx_launcher_17b5ab7”还可见,必须注销重新登录才会消失 if(SERVICE_STOPPED != objStatus.dwCurrentState && TRUE == ControlService(hService, SERVICE_CONTROL_STOP, &objStatus)) @@ -198,7 +195,7 @@ bool isSysService(QString &strErr) else { //< 判断服务是否已存在 - SC_HANDLE hService = ::OpenService(hSCM, pszServiceName, SERVICE_QUERY_CONFIG); + SC_HANDLE hService = ::OpenService(hSCM, g_pTCharLauncherServiceName, SERVICE_QUERY_CONFIG); if (NULL != hService) { strErr = QObject::tr("已设置服务自启动,若需重新设置,请先取消!"); @@ -216,7 +213,7 @@ bool isSysService(QString &strErr) bool isSysStartupVbsExist() { - QFile vbsFile( QDir::toNativeSeparators(QString("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp") + "\\sys_startup.vbs" ) ); + QFile vbsFile( QDir::toNativeSeparators(QString(g_pszAutoStartSysStartupPath)) ); return vbsFile.exists(); } @@ -230,7 +227,7 @@ bool setSysStartupAutoStartByVbs(QString &strErr,QString path) vbsTxt += QString("WshShell.Run \"") + "\"\"" + QDir::toNativeSeparators(path + "\\sys_startup.exe\"\" -hide") + "\"\n"; vbsTxt += "Set WshShell = Nothing"; - QFile vbsFile( QString() + QDir::toNativeSeparators(QString("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp") + "\\sys_startup.vbs" ) ); + QFile vbsFile( QDir::toNativeSeparators(QString(g_pszAutoStartSysStartupPath)) ); if(!vbsFile.open(QFile::WriteOnly | QFile::Truncate)) { strErr = QObject::tr("启动文件无法写入"); @@ -252,7 +249,7 @@ bool setSysStartupAutoStartByVbs(QString &strErr,QString path) bool unsetSysStartupAutoStartByVbs(QString &strErr) { Q_UNUSED(strErr) - QFile file("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\sys_startup.vbs"); + QFile file(g_pszAutoStartSysStartupPath); if(!file.exists()) return true; if(file.remove()) @@ -268,7 +265,7 @@ bool unsetSysStartupAutoStartByVbs(QString &strErr) -} //< iot_sys +} //< namespace iot_sys diff --git a/product/src/sys/sys_startup/VersionForm.cpp b/product/src/sys/sys_startup/VersionForm.cpp index 12a07401..c7c60bb8 100644 --- a/product/src/sys/sys_startup/VersionForm.cpp +++ b/product/src/sys/sys_startup/VersionForm.cpp @@ -7,7 +7,7 @@ #include #include #include - +#include "pub_utility_api/FileUtil.h" using namespace sys_startup; VersionForm::VersionForm(QWidget *parent) : QWidget(parent), @@ -56,13 +56,14 @@ void VersionForm::initView() ui->dbValue->setText(versionMap.value(QString::fromStdString(SOFTWARE_ISDB),"0") == "1" ? tr("已安装"):tr("未安装")); ui->webValue->setText(versionMap.value(QString::fromStdString(SOFTWARE_ISWEB),"0") == "1" ? tr("已安装"):tr("未安装")); - if(versionMap.value(QString::fromStdString(SOFTWARE_ISMAIN),"0") == "0") - { - ui->mainPathValue->setText(tr("无主程序路径")); - }else - { - ui->mainPathValue->setText(versionMap.value(QString::fromStdString(SOFTWARE_MAINPATH))); - } + const std::string strFileName = "hmi_explorer.bat"; + QString strPath = QString::fromStdString( iot_public::CFileUtil::getPathOfBinDir(CN_DIR_PLATFORM)); + QDir pathFile(strPath); + pathFile.cdUp(); + pathFile.cdUp(); + + ui->mainPathValue->setText(pathFile.absolutePath()); + if(versionMap.value(QString::fromStdString(SOFTWARE_ISDB),"0") == "0") { ui->dbPathValue->setText(tr("无数据库路径")); @@ -81,6 +82,7 @@ void VersionForm::initView() void VersionForm::showInFolder(const QString &path) { + initView(); QFileInfo info(path); #if defined(Q_OS_WIN) QStringList args; diff --git a/product/src/sys/sys_startup/auto_start.ico b/product/src/sys/sys_startup/auto_start.ico index a9dee174b741e470e971c62dad57381e7cba3217..4d3d30aebcfc173d924420f4cb980c959f5e5183 100644 GIT binary patch literal 4286 zcmeHKyG{a85It&viG?O6YA1z-i6tL^f8Zzh36_>_Sdh}va!c*}gf*cskr)$@P)cH9 zVPmI-aXkY&uwM7>1J)Q5mJGw4y>rgY+$X>SKjkvy8<%Uq27p}(P1vW1T^@(;)>lR{ zG|a#LRR#J@R37SZDgJ|tXX;=mE?%fxlxDw%O3_JmPEqaF(H`?DuU-3n`pg=K?_imn zUJl+-JtlE^f-y}TJqKIN`DO<0VJw2tZD2D`3=(q@+#0)J<*CDrH8;mV+g_F$$h^_G zi`Jc5`kW-EUo@}caU9x7HITKdeN**l&1-El>!kgGoXu2TSz9iSB@gyJ?7Dc$edJHoLF6+VpRpKUwcYjNePh!IoQ^-LvIv+W-3gA@SV) z;r&bNA$6E>ET+DHY7C;oIqBz^6K$@uY80c0-{Jj4_V(7dvvTxbMB;PP)^`zc%rT0q zKoETfr66z?f=}S&1E{_O+aj;Ps>lE+4HhX&BG;5x$~$EcwrOV{?XUiVC76O82uI}k E0{67^g#Z8m literal 4286 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 diff --git a/product/src/sys/sys_startup/en.ts b/product/src/sys/sys_startup/en.ts new file mode 100644 index 00000000..f5b1b18e --- /dev/null +++ b/product/src/sys/sys_startup/en.ts @@ -0,0 +1,1042 @@ + + + + + AppMngForm + + + Form + Form + + + + 节点应用 + Node Application + + + + 状态 + Status + + + + 主/备 + Master/Slave + + + + + 重启 + Restart + + + + 刷新 + Refresh + + + + 启动 + Start up + + + + 停止 + Stop + + + + 升主 + to Master + + + + 降备 + to Slave + + + + + + + 验证 + Ok + + + + + + + 权限验证 + Permission to verify + + + + + 运行中 + Active + + + + + 主 + Master + + + + + 备 + Slave + + + + + + + 异常 + Abnormal + + + + + 已停止 + Stopped + + + + + 未知 + Unknown + + + + AutoStart + + + Dialog + Dialog + + + + 开机自启动 + Auto start + + + + 系统开机自启动 + System auto start + + + + HMI 开机自启动 + HMI auto start + + + 桌面模式(适合调试) + Desktop mode (suitable for debugging) + + + 大屏模式(内存占用小) + Large screen mode (low memory usage) + + + 本次设置将在下次重启生效 + The settings will take effect after the next restart + + + + 自启动设置 + Auto start setting + + + + ButtonForm + + + Form + Form + + + + 验证 + Ok + + + + 权限验证 + Permission to verify + + + 提示 + Tips + + + + 设置系统开机自启动成功... + Setup system auto start successfully... + + + + 设置系统开机自启动失败...错误:%1 + Setup system auto start failure... Error:%1 + + + + 注销系统开机自启动成功... + The system has been successfully booted... + + + + 注销系统开机自启动失败......错误:%1 + Logout system startup failure... Error:%1 + + + + 设置HMI开机自启动成功... + Set HMI auto start successfully... + + + + 设置HMI开机自启动失败...错误:%1 + Set HMI auto start failure... Error:%1 + + + + 注销HMI开机自启动成功... + Logout HMI startup since startup successful... + + + + 注销HMI开机自启动失败...错误:%1 + Logout HMI startup self-start failure... Error:%1 + + + 设置桌面模式成功 + Desktop mode set successfully + + + 设置桌面模式成功...错误:%1 + Desktop mode set successfully... Error: %1 + + + 设置大屏模式成功 + Large screen mode set successfully + + + 设置大屏模式失败...错误:%1 + Failed to set large screen mode... Error: %1 + + + + DbCheck + + + 数据库检测 + Database detection + + + + + 连接状态 + Connection Status + + + + 同步状态 + Synchronization Status + + + + 同步状态: + Synchronization Status: + + + + 最大ID主机: + Max ID Host: + + + + 服务状态: + Service Status: + + + + IP漂移主机: + IP Drift Host: + + + + 读写状态 + Read/Write Status + + + + 模型(读): + Model (Read): + + + + 模型(写): + Model (Write): + + + + 历史(读): + History (Read): + + + + 时序库状态 + Time Series Database Status + + + MySQL状态 + MySql + + + + 节点名/IP + Node Name/IP + + + 模型(写) + Model(Write) + + + 模型(读) + Model(Read) + + + 历史(读) + His(Read) + + + InfluxDB状态 + InfluxDB + + + + 正在刷新,无需再次提交刷新! + Refreshing now, no need to submit refresh again! + + + + 正在刷新,请稍后! + Refreshing, please wait a moment! + + + + 查询成功! + Query successful! + + + + %1 + %1 + + + + + + + 未知 + Unknown + + + + + + + 正常 + Connected + + + + + 同步ID相差:%1 + Synchronization ID difference: %1 + + + + 读取失败:%1 + Read failed: %1 + + + + + 未启用 + Not enabled + + + + + 无 + None + + + + 服务未开启:%1 + Service not started: %1 + + + + 刷新 + Refresh + + + + + 异常 + Not Connected + + + 获取域信息失败 + Faild to obtain domain infomation + + + 获取数据库信息失败 + Faild to obtain database infomation + + + + (首链接) + (First Link) + + + + + + + + + + + - + - + + + + DbCheckThread + + + UDP绑定失败,端口号【%1】 + UDP binding failed, port number 【%1】 + + + + + 创建系统信息访问库失败 + Failed to create system information access library + + + + 获取域信息失败 + Failed to obtain domain information + + + + 获取数据库信息失败 + Failed to obtain database information + + + + 获取节点信息失败 + Failed to obtain node information + + + + [%s]数据库类型错误!参数错误,直接默认为数据库状态不正常 + [%s] Database type error! Parameter error, defaulting to database status as abnormal + + + + DogCheck + + + Dialog + Dialog + + + + 加密狗状态: + Supper Dog Status: + + + + 1、请将操作系统信息(re_code.txt)发给系统提供商,获取授权文件 + 1. Please send the operating system information (re_code.txt) to the system provider to obtain the authorization file. + + + + 拷贝操作系统信息 + Copy operating system information + + + + 2、获取授权文件后,进行系统激活 + 2. After obtaining the authorization file, activate the system. + + + + 导入授权文件 + Import authorization file + + + + 加密狗检测 + Supper Dog Check + + + + + + + 提示 + Tips + + + + 选择授权文件 + Select the authorization file + + + + txt (*.txt) + txt (*.txt) + + + + + 重新检测 + Recheck + + + + 异常,错误码[%1] + Abnormal,Error Code[%1] + + + + + 正常 + Normal + + + + MainWindow + + + 应用管理 + Application + + + + 进程管理 + Process Info + + + + 工具箱 + Toolbox + + + + 版本 + Version + + + + + 提示 + Tips + + + + 系统启动失败,请检查所有配置工具和人机界面是否已经全部退出! + System failed to start,please check whether all configuration tools and human interface have been exited! + + + + 错误 + Error + + + 未发现系统模型配置文件,是否打开系统建模工具导出模型配置? + The system model configuration file is not found. Do you open the system modeling tool to export the model configuration? + + + + 开始停止系统 + Stop system + + + + 开始启动进程:%1 + Start process:%1 + + + + + 启动进程:%1失败 + Start process:%1 faild + + + + 启动进程:%1成功 + Start process:%1 success + + + + 开始停止进程:%1 + Stop process:%1 + + + + + + 停止进程:%1失败 + Stop process:%1 faild + + + + + + 停止进程:%1成功 + Stop process:%1 success + + + + 强制停止进程:%1 + Kill process:%1 + + + + 显示 + Display + + + + 退出 + Exit + + + + 系统模型配置信息异常,是否打开系统建模工具检查配置并导出? + There is an exception in the system model configuration information. Do you want to open the system modeling tool to check the configuration and export it? + + + + 加密狗退出 + Supper Dog Exit + + + + ProcMngForm + + + Form + Form + + + + 节点应用进程 + Application process + + + + 进程名 + Process name + + + + 所属应用 + Application + + + + 状态 + Status + + + + CPU + CPU + + + + 内存(MB) + Memory (MB) + + + + 主/备 + Master/Slave + + + + + 重启 + Restart + + + + 刷新 + Refresh + + + + 启动 + Start up + + + + 停止 + Stop + + + + 升主 + to Master + + + + 降备 + to Slave + + + + 强制停止 + Kill + + + + + + + 验证 + Ok + + + + + + + 权限验证 + Permission to verify + + + + + 运行中 + Active + + + + + + + 异常 + Abnormal + + + + + 主 + Master + + + + + 备 + Slave + + + + + 已停止 + Stopped + + + + + 未知 + Unknown + + + + QObject + + + + + + 已设置服务自启动,若需重新设置,请先取消! + The service has been set since the start, if you need to reset, please cancel first! + + + + + 设置可执行权限失败! + Failed to set executable permissions! + + + + + + 文件不存在! + The file does not exist! + + + + 服务配置文件不可写,请确认是否具有权限! + The service profile cannot be written, please confirm if you have permission! + + + + 写入服务配置文件失败! + Write service profile failed! + + + + 取消服务开机自启动失败! + Failed to cancel the service from starting automatically on boot! + + + 设置合成器服务开机自启动失败! + Failed to set the compositor service to start automatically on boot! + + + 设置sys_startup服务开机自启动失败! + Failed to set the sys_startup service to start automatically on boot! + + + 取消rqeh6000_compositor服务开机自启动失败! + Failed to cancel the rqeh6000_compositor service from starting automatically on boot! + + + 取消rqeh6000_startup服务开机自启动失败! + Failed to cancel the rqeh6000_startup service from starting automatically on boot! + + + 调用系统重新加载配置失败! + Call system reload configuration failed! + + + + 设置服务开机自启动失败! + Setup service startup auto startup failed! + + + + 未设置服务自启动,无需取消! + Do not set the service to start, no need to cancel! + + + 删除服务配置文件失败,请确认是否具有权限! + Failed to delete service profile, please confirm if you have permissions! + + + + + 已设置HMI自启动,若需重新设置,请先取消! + HMI has been set to start, if you need to reset, please cancel first! + + + + 启动器文件不可写,请确认是否具有权限! + Initiator file cannot be written, please confirm whether you have permission! + + + + 删除启动器文件失败,请确认是否具有权限! + Failed to delete starter file, please confirm if you have permission! + + + + 未设置HMI自启动,无需取消! + HMI self-start is not set, no need to cancel! + + + + + + 打开服务管理器失败,请确认是否具有权限! + Failed to open service manager, please confirm if you have permission! + + + + 注册服务失败,请确认是否具有权限! + Registration service failed, please confirm if you have permission! + + + + 注销服务失败! + Logout service failed! + + + + 停止服务超时! + Stop service timeout! + + + + 获取服务状态失败! + Failed to get service status! + + + + + 启动文件无法写入 + Startup file cannot be written + + + + 警告 + Warning + + + + 正在运行 + System still in running + + + + StartUpForm + + + Form + Form + + + + + 系统启动 + System startup + + + + + 系统停止 + System to stop + + + + 验证 + Ok + + + + 权限验证 + Permission to verify + + + + 退出系统前,请将所有配置工具和人机界面退出! + Before exiting the system, please exit all configuration tools and human interface! + + + + StatusForm + + + Form + Form + + + + 加密狗状态: + Supper Dog Status: + + + + + + + 正常 + Normal + + + + 本地网络状态: + Local Network Status: + + + + + 异常 + Abnormal + + + + 未检测 + Unchecked + + + + VersionForm + + + Form + Form + + + + 版本信息 + Version + + + + 主程序 + Main + + + + 数据库 + Db + + + + Web + Web + + + + 主程序路径 + MainPath + + + + 数据库路径 + DbPath + + + + 无版本信息 + No Version Information + + + + + + 已安装 + Installed + + + + + + 未安装 + Not Installed + + + 无主程序路径 + No MainPath + + + + 无数据库路径 + No DbPath + + + diff --git a/product/src/sys/sys_startup/sys_startup.ico b/product/src/sys/sys_startup/sys_startup.ico index 41524ddc2d1e75c7271798270e972ddce458fae8..396f47b94649c826d0e87ce286d3738b1ab883d8 100644 GIT binary patch literal 16958 zcmd^HO^h7X5w6);GYAm70)%ov*@>5fBOzo7AvqFgMqIcg^4OPPD^dpTcn5)i184>g zK_H@A5GY2&rQ5(4!^0XZ^1y?}v5jQ3IXX5RYin(jBRcV~7T zGgfa^y{`9Oef6qpx~E^8sKEcKRpP&8I`9zDokVni4{o9sAJT3=RifK(?jQYzz5Qz% zRNq`EL}q~&nV;QTYj$sT#(HpbfjW%cz!94h^!wejV)tia++|+tHeg2l1D-mfxBJ#j zZpJX&L$T20e*f1wu?^fh9wPHNRVKGGlNs6KK0!^XZT?tKthvSxGA+rNld*QZqq3d0 zrjG}A!aq_U7shMtctSa$3;5K*rQLU$u!RL@o(xh zR_UNygGo|_Td?D?dWz%0&Cjtg%YHby10N)CUnD9s?zZ4|hs7^G=pT#hhl%9I2;Arc zbIQ~fS%1q8$qBPi=;ZK2Eb+tr%Hqp3+!^@A5AhRc$5$r>_uHn{?8kUwtrM749LTx& zEmKQe&oUnQZt&*B6|SKUw_yK#nwl=w9cH9z{aqZ`oY-k?;B~BXJVzAKhWzxcnf* z?p51&mIH}#BCaPx-&KsU>cg3JE+>9l9}qM0ZmgF+x!e4y_v>-{A=32_=f0Nkiyxjk zzt6n->AmCdLG)*Hw1rr+_|NuDJpO~$-^GE@XD-~d?VRBCZvPc(KjN3ul z`edKYS?8P$nr7*{cFBoX{`bqw+7N=<&AEmD%v9vs9L$JRXJw?6ns@*0iv zpy4q3Xo#I!N893LtrsG@zImy}e=H>r8273VyPONLQR`&cs`WzTtg%M5Yy4@oQ1aj> zg`Z>K5tRpwzvc5m$Qo&#thLd4Au^67_vtA6__Xzx7&v}rs;&F^t_ebH)H-^6Cu_YB z+4U95>$HlpkI%#}K3Ji{*w>c_AvS6q92uzxicD^P`uZ5|35Mra&aW-kH^+IGE!{%v`Vx0$T^He)OPX>?Zc-6SiH$TMY zkI|zEKj>=$nI|m|LTuDJXfyI!FGR-vu1?8)Jhlt}-aJKF_?;h4oK41pu7zoN5Mra& z(Y85R>xIa!uTY0y=x4>`v+N58sEqhOsFWS-E&9$UFC=2%_{!8!J>hXr;yfWXY8|v0 zd94>BV}G;*4n}@%rO4p`=fZ4W-$*!Y}7hvGxAz5M8^JzUwEAd zt7V$idGPVmb@S!lm(1mVcFf=YwGbU!DR%Hks{?qC7-FN=L7S1+dLc6Q*Z4)&d2oI| z)iDN;e{Vk}?t^e_&AWTV5F53Q9?QvEFGO~Ig{I+8%L9&qHsW@C9{lzmk$)=*u~F-w z&B$xL5E=WY;g>d@2ZLG|JKT=u!7uYl9)#GabYkO zFXM&SsCCc| zdTSl*?^}O&&UZ}^ieH{5^4^0b_e|#X^+V?A_iqaJ1KNzd#ug%De}~aWB@eKV#DL3# zQTPYA+YUF#BYx1e0c}QJV+)b7e->6xdm;~HEMJaezUSq!HlWSOhv3yZ z*x!RQGZ$PQ$leIpPnMe7c`<8!R~yh~j!Ts&Sg!@`k_j#Y@eFJQJyaPXY_gtXuSv>op+*qS_RxDt@QTPS-H@`~YMjtS5 z_x2|C#z1BLn_G{@2I zJiPV8Sz2{|z`kkt^WawdLuJ4F&^sWqpX9Bp`;Osz;^B%?NLeOK%_#}Pvwo_&zGpBMZowJkNq)mjJWaBaB8--Wq+KY91|=Epo7 zBUkwSu{>+Eo4T@ZdBX32L_A00`(Zcnh0et`=H2f;D*hAi0fgGI*Lq{{LnM2}_Zr7e z=NCV4?yu&_f4wh!r#4&*{n-!l{zK&R!}W+8ea}8feg8rH!q+>AeIMBGdgH+ltN2da zZsX*~&YN@c@Y$G+nLh0n`?N)tZW3RG@@Io+PUt$3RqPU3MgBUvp=nI-E~1~!@#!0g z>Lp{A3oUA~0#Ucfuf6an2X7&&@F=%%j~VV=TIPdkaX@DVw8CvAKA!8-La$-vQtw$y z=X!@MZOV+SXL>&$&|3$zWNF+hwd8!fI) L`e2=VJc{`dt8?Qi literal 4286 zcmdUvO=}ZT6o$uN(5zgEou$iJh(?K>>lc2YwSJLpb|Q#G5ClOS5JV89f>02_P!I}& zL=d6kqDz=akDd(=;D4c*B!(?>X;z&&`m;^A6zU`yRi0D<#i6 z=y~1|fRtwd=l|EWarda1gh@X4#=T<(&?HPUfAjuvAFMg7V^2e1jrKGrnV;?5d{8a{ z8Unt7qpjA%6FxBepbiZUfi?T_3iy_-MV+nS<84%<9F%Y&Z~38jPEpFr_SxXK2MD6g0le; zSakD)_R#pEAL)M=J$CN)n+wFKH})mTB@&I+vJv$FsIHljHP+_dK{S+pn73qo2A!cbqK_q-9NhxyiBLoIvpVUg-pVyg zww`x}eocB}#N5w^S^yH!@{ES-xs(5RoqE8nO=}O|MfL`9c827s_vwaZS~FcAcpLRc zj59SmxBvMjF>Y;|dwADD0|c%w&$N8GMSbAb{`DU7N<5RHueTGxu^3jX5v^9KAR>O& z^sQ