|
@@ -100,7 +100,7 @@ std::pair<bool, HANDLE> assigntoJob(HANDLE process, int pid)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-std::tuple<bool, HANDLE, HANDLE> startProcessInJob(std::string program, std::string args)
|
|
|
+std::tuple<bool, DWORD, HANDLE, HANDLE> startProcessInJob(std::string program, std::string args)
|
|
|
{
|
|
|
PROCESS_INFORMATION processInfo;
|
|
|
ZeroMemory(&processInfo, sizeof(processInfo));
|
|
@@ -111,19 +111,26 @@ std::tuple<bool, HANDLE, HANDLE> startProcessInJob(std::string program, std::str
|
|
|
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
|
|
|
startupInfo.wShowWindow = SW_HIDE;
|
|
|
|
|
|
- std::string runInfo = program + std::string(" ") + args;
|
|
|
-
|
|
|
- BOOL retVal = ::CreateProcessA(NULL, const_cast<char*>(runInfo.c_str()), NULL, NULL, FALSE,
|
|
|
- CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &startupInfo, &processInfo);
|
|
|
+ BOOL retVal = false;
|
|
|
+ if(args.length() == 0)
|
|
|
+ {
|
|
|
+ retVal = ::CreateProcessA(NULL, const_cast<char*>(program.c_str()), NULL, NULL, FALSE,
|
|
|
+ CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &startupInfo, &processInfo);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ retVal = ::CreateProcessA(const_cast<char*>(program.c_str()), const_cast<char*>(args.c_str()), NULL, NULL, FALSE,
|
|
|
+ CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &startupInfo, &processInfo);
|
|
|
+ }
|
|
|
if (!processInfo.hProcess)
|
|
|
{
|
|
|
- DbgEx("CreateProcess failed!, %s", runInfo.c_str());
|
|
|
- return std::make_tuple(false, (HANDLE)NULL, (HANDLE)NULL);
|
|
|
+ DbgEx("CreateProcess failed!, %s, %s", program.c_str(), args.c_str());
|
|
|
+ return std::make_tuple(false, 0, (HANDLE)NULL, (HANDLE)NULL);
|
|
|
}
|
|
|
|
|
|
auto ret = assigntoJob(processInfo.hProcess, processInfo.dwProcessId);
|
|
|
|
|
|
- return std::make_tuple(ret.first, ret.second, processInfo.hProcess);
|
|
|
+ return std::make_tuple(ret.first, processInfo.dwProcessId, ret.second, processInfo.hProcess);
|
|
|
}
|
|
|
|
|
|
bool KillProcessById(DWORD pID)
|
|
@@ -141,13 +148,5 @@ bool KillProcessById(DWORD pID)
|
|
|
return ret;
|
|
|
}
|
|
|
#else
|
|
|
-std::tuple<bool, long, long> startProcessInJob(std::string program, std::string args)
|
|
|
-{
|
|
|
- return std::make_tuple(true, 1, 1);
|
|
|
-}
|
|
|
|
|
|
-std::pair<bool, long> assigntoJob(long process, int pid)
|
|
|
-{
|
|
|
- return std::make_pair(true, 1);
|
|
|
-}
|
|
|
#endif
|