diff options
Diffstat (limited to 'client/Proxifier.cpp')
-rw-r--r-- | client/Proxifier.cpp | 114 |
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() |