From 923434aa72efc33432ce1ec0f934bd85b6341d2f Mon Sep 17 00:00:00 2001 From: kervala Date: Tue, 2 Feb 2016 19:49:37 +0100 Subject: [PATCH 1/2] Changed: Detect .bat file in launchProgram and adapt syntax of CreateProcess --HG-- branch : develop --- code/nel/src/misc/common.cpp | 17 ++++++++++++++++- code/ryzom/client/src/login_patch.cpp | 6 +++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/code/nel/src/misc/common.cpp b/code/nel/src/misc/common.cpp index 6888dd24f..d586e4638 100644 --- a/code/nel/src/misc/common.cpp +++ b/code/nel/src/misc/common.cpp @@ -732,7 +732,22 @@ bool launchProgram(const std::string &programName, const std::string &arguments, SetEnvironmentVariable( SE_TRANSLATOR_IN_MAIN_MODULE, NULL ); } - BOOL res = CreateProcessA(programName.empty() ? NULL:programName.c_str(), (char*)arguments.c_str(), NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE | CREATE_NO_WINDOW, NULL, NULL, &si, &pi); + const char *sProgramName = programName.c_str(); + + std::string args; + + // a .bat file must have first parameter to NULL and use 2nd parameter to pass filename + if (CFile::getExtension(programName) == "bat") + { + sProgramName = NULL; + args = "\"" + programName + "\" " + arguments; + } + else + { + args = arguments; + } + + BOOL res = CreateProcessA(sProgramName, (char*)args.c_str(), NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE | CREATE_NO_WINDOW, NULL, NULL, &si, &pi); if (res) { diff --git a/code/ryzom/client/src/login_patch.cpp b/code/ryzom/client/src/login_patch.cpp index 68b29b687..898ee7d6d 100644 --- a/code/ryzom/client/src/login_patch.cpp +++ b/code/ryzom/client/src/login_patch.cpp @@ -938,14 +938,14 @@ void CPatchManager::executeBatchFile() chmod(batchFilename.c_str(), S_IRWXU); #endif - std::string cmdLine = "\"" + batchFilename + "\" " + LoginLogin + " " + LoginPassword; + std::string arguments = LoginLogin + " " + LoginPassword; if (!r2Mode) { - cmdLine += " " + toString(LoginShardId); + arguments += " " + toString(LoginShardId); } - if (launchProgram("", cmdLine, false)) + if (launchProgram(batchFilename, arguments, false)) { exit(0); } From 72e1724b676daf1999df66c30c28d20ae4e6ec98 Mon Sep 17 00:00:00 2001 From: kervala Date: Tue, 2 Feb 2016 19:50:04 +0100 Subject: [PATCH 2/2] Changed: Use absolute path --HG-- branch : develop --- code/ryzom/client/src/login_patch.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/ryzom/client/src/login_patch.cpp b/code/ryzom/client/src/login_patch.cpp index 898ee7d6d..3273dc95d 100644 --- a/code/ryzom/client/src/login_patch.cpp +++ b/code/ryzom/client/src/login_patch.cpp @@ -719,7 +719,7 @@ void CPatchManager::stopPatchThread() // **************************************************************************** void CPatchManager::deleteBatchFile() { - deleteFile(UpdateBatchFilename, false, false); + deleteFile(ClientRootPath + UpdateBatchFilename, false, false); } // **************************************************************************** @@ -952,7 +952,7 @@ void CPatchManager::executeBatchFile() else { // error occurs during the launch - string str = toString("Can't execute '%s': code=%d %s (error code 30)", UpdateBatchFilename.c_str(), errno, strerror(errno)); + string str = toString("Can't execute '%s': code=%d %s (error code 30)", batchFilename.c_str(), errno, strerror(errno)); throw Exception (str); } }