我在运行Windows核心编程示例程序05-JobLab.exe示例程序时,无论在命令行启动,VS启动还是资源管理器启动,都会弹窗"Process already in a job"。
程序启动时会首先运行如下代码,检测进程是否处于一个Job中,
// Check if we are not already associated with a job.
// If this is the case, there is no way to switch to
// another job.
BOOL bInJob = FALSE;
IsProcessInJob(GetCurrentProcess(), NULL, &bInJob);
if (bInJob) {
MessageBox(NULL, TEXT("Process already in a job"),
TEXT(""), MB_ICONINFORMATION | MB_OK);
return(-1);
}
按书上的说法,命令行启动的是应该是可行的。但无论尝试编译程序的x86/x64版本,Realese/Debug版本,无论是否以管理员模式启动cmd,都无法达到目的。
最后,我查看了Windows任务管理器中进程的Job对象ID,发现启动的cmd.exe进程有Job对象ID。这是否是Windows新版本(目前使用的是Winows 11)后做的修改?如果是,为何会有这种导致旧版程序无法正常运行的变更呢?以及如何才能正常运行示例程序?