From 9f89e48733b651888192409e22afe3f921544c68 Mon Sep 17 00:00:00 2001 From: Nova Date: Sat, 22 Mar 2025 21:47:39 +0330 Subject: [PATCH] check vc redist in runtime --- CMakeLists.txt | 2 ++ include/sys/windows/vcCheck.h | 3 +++ src/main.cpp | 11 ++++++++++- src/sys/windows/MiniDump.cpp | 2 +- src/sys/windows/vcCheck.cpp | 10 ++++++++++ 5 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 include/sys/windows/vcCheck.h create mode 100644 src/sys/windows/vcCheck.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 00cbb20..6747f73 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,6 +209,8 @@ set(PROJECT_SOURCES include/stats/connections/connectionLister.hpp src/stats/connectionLister/connectionLister.cpp src/configs/proxy/Json2Bean.cpp + include/sys/windows/vcCheck.h + src/sys/windows/vcCheck.cpp ) # Qt exe diff --git a/include/sys/windows/vcCheck.h b/include/sys/windows/vcCheck.h new file mode 100644 index 0000000..1e2100e --- /dev/null +++ b/include/sys/windows/vcCheck.h @@ -0,0 +1,3 @@ +#pragma once + +bool checkVCRedist(); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 0143d0b..d0216e9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,6 +12,7 @@ #include <3rdparty/WinCommander.hpp> #include "include/global/NekoGui.hpp" +#include "include/sys/windows/vcCheck.h" #include "include/ui/mainwindow_interface.h" @@ -68,6 +69,14 @@ int main(int argc, char* argv[]) { QApplication::setQuitOnLastWindowClosed(false); QApplication a(argc, argv); +#ifdef Q_OS_WIN + if (!checkVCRedist()) + { + QMessageBox::critical(nullptr, "Cannot run Nekoray", "You need to install VC 2022 Redistributable, Download it from: https://aka.ms/vs/17/release/vc_redist.x64.exe"); + return 1; + } +#endif + // Clean QDir::setCurrent(QApplication::applicationDirPath()); if (QFile::exists("updater.old")) { @@ -162,7 +171,7 @@ int main(int argc, char* argv[]) { dir_success &= dir.mkdir(RULE_SETS_DIR); } if (!dir_success) { - QMessageBox::warning(nullptr, "Error", "No permission to write " + dir.absolutePath()); + QMessageBox::critical(nullptr, "Error", "No permission to write " + dir.absolutePath()); return 1; } diff --git a/src/sys/windows/MiniDump.cpp b/src/sys/windows/MiniDump.cpp index ff13ad9..80574da 100644 --- a/src/sys/windows/MiniDump.cpp +++ b/src/sys/windows/MiniDump.cpp @@ -55,7 +55,7 @@ LONG __stdcall CreateCrashHandler(EXCEPTION_POINTERS *pException) { dumpText = ""; } // 创建消息提示 - QMessageBox::warning(NULL, "Application crashed", + QMessageBox::critical(NULL, "Application crashed", QString("ErrorCode: %1 ErrorAddr:%2 ErrorFlag: %3 ErrorPara: %4\nVersion: %5\nDump file at %6") .arg(errCode) .arg(errAddr) diff --git a/src/sys/windows/vcCheck.cpp b/src/sys/windows/vcCheck.cpp new file mode 100644 index 0000000..15f04cc --- /dev/null +++ b/src/sys/windows/vcCheck.cpp @@ -0,0 +1,10 @@ +#include + +#include + +bool checkVCRedist() +{ + QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\x64", QSettings::NativeFormat); + + return (settings.value("Installed").toInt() == 1); +}