有没有办法从JobObject中分离进程? 我的问题是,如果我使用RunAs创建一个新进程,如cmd.exe,那么它将自动分配给JobObject。如果我想从这个cmd运行我的应用程序,它也将被分配给这个工作对象。问题从这里开始,因为我的应用程序将创建一个新的作业对象并创建一个新进程,然后将其分配给我的新JobObject,但它无法关联,因为第一个以runas开头的cmd已经分配给了一个jobobject,并且所以我创建的新流程也分配给了这个工作对象。
所以我的问题是,如何从作业对象中分离第一个cmd,这将自动创建,或者我还能如何解决这个问题呢?
答案 0 :(得分:1)
不要使用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。 : - )