如何强制进程在Windows 2003服务器上的控制台上运行?

问题描述:

我有一个时髦的情况,某些批处理类型应用程序在控制台上运行时(通过RDP或物理登录到该框)正常工作,但在非控制台会话中通过RDP运行时无法正常工作或者,就此而言,由Windows任务计划程序执行时。如何强制进程在Windows 2003服务器上的控制台上运行?

我知道如何通过编程确定我的进程是否在控制台上运行,或者通过检查SESSIONNAME环境变量。我的问题是,如果我确定我没有在控制台上运行,我想要切换到控制台(似乎不太可能是由于窗口站限制),或者更有可能重新启动该过程,但强制它在控制台会话上运行。

对于通过Windows任务计划程序启动的进程而言,这确实是个问题,因为它们似乎无法在控制台上运行。

我想你可以通过WTSGetActiveConsoleSessionId,WTSQueryUserToken和CreateProcessAsUser的组合在控制台会话中创建进程。