繁体   English   中英

如何从Windows Service主要功能启动C ++本机应用程序(该应用程序与控制台交互)?

[英]How can I launch a C++ native application from a Windows Service main function (the application interacts with the console)?

我正在使用_spawnl()函数从主要Service函数( SvcMain )启动C ++本机应用程序,但是该应用程序永远无法运行。

是否有启动与用户交互的应用程序的技巧?

它正在运行,您只是看不到它。 您必须使用CreateProcessAsUser()而不是_spawnl()以便新进程在特定用户的会话中运行,而不是在服务自己的会话中运行。 在Vista和更高版本中,服务在其自己的隔离会话(会话0隔离)中运行,用户无法查看或与其交互。 常见的解决方案是使用WTSGetActiveConsoleSessionId()和/或WTSEnumerateSessions()查找所需的用户会话,然后使用WTSQueryUserToken()获取令牌hanlde可以与CreateEnvironmentBlock()CreateProcessAsUser() 另外,在向CreateProcessAsUser()提供STARTUPINFO时,请将lpDesktop字段设置为"WinSta0\\\\default" (登录后可以与之交互的用户默认桌面)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM