From b9effdcfd0ba531c4063bfaabe8cfd79d13d4158 Mon Sep 17 00:00:00 2001 From: Odizinne Date: Sun, 10 Nov 2024 17:27:25 +0100 Subject: [PATCH] remove localsocket, check if process is already running with tasklist instead --- BigPictureTV.pro | 2 +- Utils/Utils.cpp | 1 + main.cpp | 45 +++++++++++++++++++-------------------------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/BigPictureTV.pro b/BigPictureTV.pro index e15d491..fe03bec 100644 --- a/BigPictureTV.pro +++ b/BigPictureTV.pro @@ -1,4 +1,4 @@ -QT += core gui network +QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets diff --git a/Utils/Utils.cpp b/Utils/Utils.cpp index 097fe2e..e01d3d5 100644 --- a/Utils/Utils.cpp +++ b/Utils/Utils.cpp @@ -1,4 +1,5 @@ #include "Utils.h" +#include #include #include #include diff --git a/main.cpp b/main.cpp index 1db9ad3..db68472 100644 --- a/main.cpp +++ b/main.cpp @@ -1,52 +1,45 @@ #include #include #include -#include -#include -#include #include #include +#include #include "BigPictureTV.h" #include "Utils.h" -int main(int argc, char *argv[]) +bool isAnotherInstanceRunning(const QString& processName) { - QApplication a(argc, argv); - - QString serverName = "BigPictureTVUniqueIdentifier"; - QLocalServer localServer; - QLocalSocket localSocket; + QProcess process; + process.start("tasklist", QStringList() << "/FI" << QString("IMAGENAME eq %1").arg(processName)); + process.waitForFinished(); + QString output = process.readAllStandardOutput(); + int count = output.count(processName, Qt::CaseInsensitive); - localSocket.connectToServer(serverName); + return count > 1; +} - if (localSocket.waitForConnected(500)) { - qDebug() << "Another instance is already running."; - return 0; +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setQuitOnLastWindowClosed(false); + if (Utils::isWindows10()) { + a.setStyle("fusion"); } - if (!localServer.listen(serverName)) { - qDebug() << "Unable to start the local server:" << localServer.errorString(); - return 1; + const QString processName = "BigPictureTV.exe"; + if (isAnotherInstanceRunning(processName)) { + qDebug() << "Another instance is already running. Exiting..."; + return 0; } QLocale locale; QString languageCode = locale.name().section('_', 0, 0); QTranslator translator; - if (translator.load(":/translations/BigPictureTV_" + languageCode + ".qm")) { a.installTranslator(&translator); } - if (Utils::isWindows10()) { - a.setStyle("fusion"); - } - a.setQuitOnLastWindowClosed(false); - BigPictureTV w; - QObject::connect(&a, &QApplication::aboutToQuit, [&localServer]() { - localServer.close(); - }); - return a.exec(); }