1

有没有办法从 JobObject 中分离进程?我的问题是,如果我使用 RunAs 创建一个新进程,例如 cmd.exe,那么它将自动分配给 JobObject。如果我想从这个 cmd 运行我的应用程序,它也会被分配给这个 jobobject。问题从这里开始,因为我的应用程序会创建一个新的jobobject并创建一个新进程,然后将其分配给我的新JobObject,但它无法关联,因为第一个以runas开头的cmd已经分配给了一个jobobject,并且所以我创建的新进程也分配给了这个jobobject。

所以我的问题是,如何将第一个 cmd 从将自动创建的 jobobject 中分离出来,或者我还能如何解决这个问题?

4

1 回答 1

1

考虑以标准用户身份运行父应用程序并使用提升权限,而不是使用 runas CreateProcessWithLogonW

或者,您可以使用psexecwhich 虽然设计用于远程执行命令,但通常可以用于转义本地计算机上的当前上下文。您可以使用 psexec 作为 runas 的替代方案:

psexec -i \\%COMPUTERNAME% -u adminuser cmd.exe

(系统将提示您输入密码)或者您可以使用 runas 然后

psexec -s -i \\%COMPUTERNAME% parent.exe

parent.exe在本地系统上下文中运行。这将转义现有的作业对象,因为新进程是从系统服务启动的。

请注意,在 Vista 及更高版本中使用psexec标志-i会更棘手,因为它更广泛地使用多个终端服务器会话;在那种情况下,您最好还是坚持使用 runas。幸运的是,您的问题仅适用于 XP。:-)

于 2012-11-21T03:35:09.940 回答