summaryrefslogtreecommitdiff
path: root/client/Proxifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'client/Proxifier.cpp')
-rw-r--r--client/Proxifier.cpp114
1 files changed, 48 insertions, 66 deletions
diff --git a/client/Proxifier.cpp b/client/Proxifier.cpp
index 0d3005d..c80657f 100644
--- a/client/Proxifier.cpp
+++ b/client/Proxifier.cpp
@@ -118,76 +118,58 @@ Proxifier::Proxifier(): valid(false)
ReadConfig();
}
-bool Proxifier::Restart()
+bool Proxifier::ReloadConfig()
{
- Logger::Info("Restarting Proxifier process\n");
-
#ifdef WIN32
- char execName[] = "Proxifier.exe";
- HANDLE hProcessSnap;
- HANDLE hProcess;
- PROCESSENTRY32 pe32;
+ char execName[] = "Proxifier.exe";
+ QString program;
+ QStringList args;
- // 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));
-
- // find Proxifier's executable and start over again
- UpdatedConfig *cfg = UpdatedConfig::CurrentConfig();
- if (! cfg->ProxifierExeFile.empty())
- {
- QString program = QString::fromLocal8Bit(cfg->ProxifierExeFile.c_str());
- QFileInfo filePathInfo(program);
- if (filePathInfo.exists())
- {
- Logger::Trace("Starting process: %s\n", program.toStdString().c_str());
- return QProcess::startDetached(program);
- }
- }
-
- 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("\"");
- QFileInfo filePathInfo(program);
- if (filePathInfo.exists())
- {
- Logger::Trace("Starting process: %s\n", program.toStdString().c_str());
- return QProcess::startDetached(program);
- }
- }
+ UpdatedConfig *cfg = UpdatedConfig::CurrentConfig();
+ if (! cfg->ProxifierExeFile.empty())
+ {
+ program = QString::fromLocal8Bit(cfg->ProxifierExeFile.c_str());
+ QFileInfo filePathInfo(program);
+ if (! filePathInfo.exists())
+ {
+ return false;
+ }
+ }
+ else
+ {
+ //try to find Proxifier.exe on my own
+ QString folderName = "Proxifier";
+ QString pathSlash = "\\";
+ TCHAR programFiles[MAX_PATH];
+ if (SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, programFiles) == S_FALSE)
+ {
+ return false;
+ }
+
+ // check in %ProgramFiles(x86)%
+ char *str = wstrdup(programFiles);
+ program = str;
+ program += pathSlash + folderName + pathSlash + execName;
+ program.prepend("\"");
+ program.append("\"");
+ QFileInfo filePathInfo(program);
+ if (filePathInfo.exists())
+ {
+ return false;
+ }
+ }
+
+ if (filePath.isEmpty())
+ {
+ return false;
+ }
+
+ Logger::Trace("Starting process: %s\n", program.toStdString().c_str());
+ args << filePath << "silent-load";
+ return QProcess::startDetached(program, args);
+#else
+ return false;
#endif
- return false;
}
bool Proxifier::IsValid()