0
我用CreateJobObjectA()創建一個作業,然後用CreateProcessA()創建一個新的進程,當我試圖將新進程分配給我用AssignProcessToJobObject()創建的作業時,它返回0 。所以我GetLastError()和即時獲得值6.根據Windows系統錯誤代碼意味着句柄無效。繼承人我的代碼。AssignProcessToJobObject失敗句柄無效
HANDLE job = CreateJobObjectA(NULL, "jobName");
if(job == NULL)
{
printf("Job is NULL");
}
else
{
JOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 };
jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
if(0 == SetInformationJobObject(job, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli)))
{
printf("Could not SetInformationJobObject\n");
}
}
if(CreateProcessA("C:\\Windows\\SysWOW64\\cmd.exe", "/c server.bat", NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
printf("CreateProcess succeeded.\n");
if(job != NULL)
{
HANDLE derp = processInfo.hProcess;
if(derp != NULL)
{
if(0 == AssignProcessToJobObject(job, derp))
{
printf("Could not AssignProcessToObject\n");
DWORD err = GetLastError();
printf("derp");
}
}
}
//Can we free handles now? Not sure about this.
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
bat文件正在做它應該做的事,並啓動運行服務器的jar。我只是不明白我的手柄是無效的。任何幫助將是驚人的。或者可能以不同的方式來做到這一點?
我想啓動這個新進程,並讓它成爲一個子進程,所以當我的主進程崩潰服務器也關閉。
謝謝。