如何从JobObject分离进程

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

所以我的问题是,如何从工作对象中分离第一个cmd,这将自动创build,或者我怎样才能解决这个问题?

Solutions Collecting From Web of "如何从JobObject分离进程"

不要使用runas,请考虑以标准用户身份运行父应用程序,并使用CreateProcessWithLogonW来提升。

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

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

(你会被提示输入密码),或者你可以使用runas然后

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

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

请注意,使用带-i标志的psexec在Vista和更高版本中会更棘手,因为它会更广泛地使用多个终端服务器会话; 在这种情况下,你可能会更好地坚持跑步。 幸运的是,你的问题只适用于XP。 🙂