有没有办法从JobObject中分离进程?
我的问题是,如果我用RunAs创建一个新进程,比如cmd.exe,那么它将被自动分配给一个JobObject。如果我想从这个命令运行我的应用程序,它也将被分配给这个jobobject。问题从这里开始,因为我的应用程序将创建一个新的jobobject并创建一个新进程,然后将其分配给我的新jobobject,但是它不能关联,因为以runas开头的第一个cmd已经分配给了jobobject,所以我创建的新进程也分配给了这个jobobject。
所以我的问题是,如何将第一个cmd与将自动创建的jobobject分离,或者如何解决这个问题?
最佳答案
不要使用runas,而是考虑将父应用程序作为标准用户运行,并使用CreateProcessWithLogonW
来提升。
或者,您可以使用psexec
,虽然它是为远程执行命令而设计的,但通常对于在本地计算机上转义当前上下文很有用。您可以使用psexec作为runas的替代:
psexec -i \\%COMPUTERNAME% -u adminuser cmd.exe
(系统将提示您输入密码)或者可以使用runas,然后
psexec -s -i \\%COMPUTERNAME% parent.exe
在本地系统上下文中运行
parent.exe
。这将逃离现有的作业对象,因为新的进程是从系统服务启动的。请注意,在Vista和以后的版本中,将
psexec
与-i
标志一起使用会更困难,因为它更广泛地使用多个终端服务器会话;在这种情况下,您可能最好坚持使用runas。幸运的是你的问题只适用于XP。:-)关于c - 如何从JobObject分离进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13471611/