summaryrefslogtreecommitdiff
path: root/client/Proxifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/Proxifier.cpp')
-rw-r--r--client/Proxifier.cpp60
1 files changed, 59 insertions, 1 deletions
diff --git a/client/Proxifier.cpp b/client/Proxifier.cpp
index 28964af..46e4339 100644
--- a/client/Proxifier.cpp
+++ b/client/Proxifier.cpp
@@ -1,6 +1,8 @@
#include <algorithm>
#ifdef WIN32
+ #include <windows.h>
+ #include <tlhelp32.h>
#include <shlobj.h>
#endif
#include <QtCore>
@@ -74,7 +76,7 @@ Proxifier::Proxifier(): valid(false)
QString file = str;
file += pathSlash + folderName + pathSlash + fileName;
QFileInfo filePathInfo(file);
- Logger::Info("Checking path: %s\n",file.toStdString().c_str());
+ Logger::Info("Checking path: %s\n", file.toStdString().c_str());
if (filePathInfo.exists())
{
filePath = filePathInfo.absoluteFilePath();
@@ -97,6 +99,62 @@ Proxifier::Proxifier(): valid(false)
#endif
}
+bool Proxifier::Restart()
+{
+ char execName[] = "Proxifier.exe";
+ Logger::Info("Restarting Proxifier process\n");
+#ifdef WIN32
+ HANDLE hProcessSnap;
+ HANDLE hProcess;
+ PROCESSENTRY32 pe32;
+
+ // Takes a snapshot of all the processes
+ hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ if (hProcessSnap == INVALID_HANDLE_VALUE)
+ {
+ return false;
+ }
+
+ // interate snapshot and find all process to be killed
+ pe32.dwSize = sizeof(PROCESSENTRY32);
+ if (!Process32First(hProcessSnap, &pe32))
+ {
+ CloseHandle(hProcessSnap);
+ return false;
+ }
+ do
+ {
+ QString procName = QString::fromWCharArray(pe32.szExeFile);
+ if (QString::compare(procName, QString::fromLocal8Bit(execName)) == 0)
+ {
+ Logger::Trace("Killing Proxifier process\n");
+ hProcess = OpenProcess(PROCESS_TERMINATE, 0, pe32.th32ProcessID);
+ TerminateProcess(hProcess, 0);
+ CloseHandle(hProcess);
+ }
+ }
+ while (Process32Next(hProcessSnap, &pe32));
+
+ // start over again
+ QString folderName = "Proxifier";
+ QString pathSlash = "\\";
+ TCHAR programFiles[MAX_PATH];
+ if (SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, programFiles) != S_FALSE)
+ {
+ // check in %ProgramFiles(x86)%
+ char *str = wstrdup(programFiles);
+ QString program = str;
+ program += pathSlash + folderName + pathSlash + execName;
+ program.prepend("\"");
+ program.append("\"");
+ Logger::Trace("Starting process: %s\n", program.toStdString().c_str());
+
+ return QProcess::startDetached(program);
+ }
+#endif
+ return false;
+}
+
bool Proxifier::IsValid()
{
return valid;