Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows服务无法在Windows 7中获取屏幕截图_C#_Windows Services_Session 0 Isolation - Fatal编程技术网

C# Windows服务无法在Windows 7中获取屏幕截图

C# Windows服务无法在Windows 7中获取屏幕截图,c#,windows-services,session-0-isolation,C#,Windows Services,Session 0 Isolation,我有一个windows服务,可以获取屏幕截图。但它只会制造黑屏。我知道发生这种情况是因为会话0隔离。我在网上搜索,找不到任何认可的解决方案,任何可行的想法都会很好 1-是否有方法更改windows服务的会话并获取其他用户会话(如会话1、会话2)的桌面屏幕 2-是否有方法从windows服务启动在会话0以外的其他会话中运行的控制台应用程序 windows服务设计为在没有用户连接的情况下运行,它的工作方式类似于服务器进程总是启动并侦听,或启动并执行某些操作,或空闲 我认为您需要的是一个客户端应用程序

我有一个windows服务,可以获取屏幕截图。但它只会制造黑屏。我知道发生这种情况是因为会话0隔离。我在网上搜索,找不到任何认可的解决方案,任何可行的想法都会很好

1-是否有方法更改windows服务的会话并获取其他用户会话(如会话1、会话2)的桌面屏幕


2-是否有方法从windows服务启动在会话0以外的其他会话中运行的控制台应用程序

windows服务设计为在没有用户连接的情况下运行,它的工作方式类似于服务器进程总是启动并侦听,或启动并执行某些操作,或空闲

我认为您需要的是一个客户端应用程序,它在每个已登录用户的会话中运行,并最终完成任务,然后,如果需要,与服务通信以完成某些任务

我在这里说的是,您可以创建一个小的可执行文件(可能根本没有UI),在每次用户登录时从所有用户的启动文件夹启动,而不是让windows服务在另一个会话中运行。然后,此类应用程序在适当的会话中运行并具有访问权限,它可以获取屏幕截图,然后将其存储在自己的某个位置,或者调用Windows服务中的某些端点(始终在会话0中运行),并使服务详细描述从其客户端应用程序中获取的屏幕截图

这就是我要做的,而不是尝试一些“魔法”来告诉Vista和7在一个用户会话中启动一项服务,该用户会话最终在系统启动时还没有登录

有没有办法更改windows服务的会话并获取其他用户会话(如会话1、会话2)的桌面屏幕

没有

是否有方法从windows服务启动在会话0以外的其他会话中运行的控制台应用程序

这是可以做到的,但很混乱。它涉及模拟登录用户、操纵用户令牌,以及使用
CreateProcessAsUser()
将进程启动到不同的会话中。这篇文章是需要的

另外,您不需要控制台应用程序,因为这样会在屏幕截图上显示控制台窗口。您只需要一个标准的Windows应用程序(使用GUI子系统),但不显示任何可见窗口。

任务计划程序中的“登录时启动”任务也可以使用启动文件夹。也许更好,因为任务可以对用户隐藏。