Fixed: Use launchProgram to launch batch

--HG--
branch : develop
hg/feature/material-editor
kervala 9 years ago
parent 6ff327f99c
commit 69b5157da5

@ -917,93 +917,44 @@ void CPatchManager::executeBatchFile()
extern void quitCrashReport (); extern void quitCrashReport ();
quitCrashReport (); quitCrashReport ();
#ifdef NL_OS_WINDOWS bool r2Mode = false;
// Launch the batch file
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE; // SW_SHOW
si.cb = sizeof(si); #ifndef RY_BG_DOWNLOADER
r2Mode = ClientCfg.R2Mode;
#endif
ZeroMemory( &pi, sizeof(pi) ); std::string batchFilename;
// Start the child process.
string strCmdLine;
bool r2Mode = false;
#ifndef RY_BG_DOWNLOADER
r2Mode = ClientCfg.R2Mode;
#endif
if (r2Mode)
{
strCmdLine = UpdateBatchFilename + " " + LoginLogin + " " + LoginPassword;
}
else
{
strCmdLine = UpdateBatchFilename + " " + LoginLogin + " " + LoginPassword + " " + toString(LoginShardId);
}
if( !CreateProcess( NULL, // No module name (use command line).
(char*)strCmdLine.c_str(), // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
// error occurs during the launch
string str = toString("Can't execute '%s': code=%d %s (error code 30)", UpdateBatchFilename.c_str(), errno, strerror(errno));
throw Exception (str);
}
// Close process and thread handles.
// CloseHandle( pi.hProcess );
// CloseHandle( pi.hThread );
#ifdef NL_OS_WINDOWS
batchFilename = CPath::standardizeDosPath(ClientRootPath);
#else #else
// Start the child process. batchFilename = ClientRootPath;
bool r2Mode = false; #endif
#ifndef RY_BG_DOWNLOADER batchFilename += UpdateBatchFilename;
r2Mode = ClientCfg.R2Mode;
#ifdef NL_OS_UNIX
// make script executable under UNIX
chmod(batchFilename.c_str(), S_IRWXU);
#endif #endif
string strCmdLine; std::string cmdLine = "\"" + batchFilename + "\" " + LoginLogin + " " + LoginPassword;
strCmdLine = "./" + UpdateBatchFilename; if (!r2Mode)
{
cmdLine += " " + toString(LoginShardId);
}
chmod(strCmdLine.c_str(), S_IRWXU); if (launchProgram("", cmdLine, false))
if (r2Mode)
{ {
if (execl(strCmdLine.c_str(), strCmdLine.c_str(), LoginLogin.c_str(), LoginPassword.c_str(), (char *) NULL) == -1) exit(0);
{
int errsv = errno;
nlerror("Execl Error: %d %s", errsv, strCmdLine.c_str());
}
else
{
nlinfo("Ran batch file r2Mode Success");
}
} }
else else
{ {
if (execl(strCmdLine.c_str(), strCmdLine.c_str(), LoginLogin.c_str(), LoginPassword.c_str(), toString(LoginShardId).c_str(), (char *) NULL) == -1) // error occurs during the launch
{ string str = toString("Can't execute '%s': code=%d %s (error code 30)", UpdateBatchFilename.c_str(), errno, strerror(errno));
int errsv = errno; throw Exception (str);
nlerror("Execl r2mode Error: %d %s", errsv, strCmdLine.c_str());
}
else
{
nlinfo("Ran batch file Success");
}
} }
#endif
// exit(0);
} }
// **************************************************************************** // ****************************************************************************

Loading…
Cancel
Save