【发布时间】:2012-11-20 10:50:13
【问题描述】:
有没有办法从 JobObject 中分离进程? 我的问题是,如果我使用 RunAs 创建一个新进程,例如 cmd.exe,那么它将自动分配给 JobObject。如果我想从这个 cmd 运行我的应用程序,它也会被分配给这个 jobobject。问题从这里开始,因为我的应用程序会创建一个新的jobobject并创建一个新进程,然后将其分配给我的新JobObject,但它无法关联,因为第一个cmd以runas开头,已经分配给了一个jobobject,并且所以我创建的新进程也分配给了这个jobobject。
所以我的问题是,如何将第一个 cmd 从将自动创建的作业对象中分离出来,或者我该如何解决这个问题?
【问题讨论】:
-
查看
CREATE_BREAKAWAY_FROM_JOB标志 (msdn.microsoft.com/en-us/library/windows/desktop/…)。但我不知道 RunAs 是否使用作业对象作为安全措施。如果是这样,它将禁用JOB_OBJECT_LIMIT_BREAKAWAY_OK,并且该标志将不起作用。 -
另外,Windows 8 似乎支持嵌套作业 (msdn.microsoft.com/en-us/library/windows/desktop/…),所以如果您可以让您的应用“仅限 Windows 8”... :)
-
@atzz:不幸的是,我的应用程序也必须在 XP 和 Windows 7 下运行,所以不能选择 Windows 8 :)
-
@atzz:我认为 RunAs 使用作业对象,因为如果您使用 runas 打开 cmd,它已经与作业相关联。这是我的问题:(
-
您不能取消现有流程与作业的关联。但是如果
CREATE_BREAKAWAY_FROM_JOB标志在RunAs下工作,你可以用这个标志创建一个子进程,这个子进程就可以从工作中解脱出来。问题是 RunAs 是否允许使用这个标志。如果在启动cmd时没有设置JOB_OBJECT_LIMIT_BREAKAWAY_OK,则该标志将不起作用。