设置Windows服务允许进行桌面交互,实现屏幕监控

简介:

默认情况下,Windows服务基于安全考虑,是不允许任何服务程序和桌面进行交互的,也就是说,使用任何的Windows Form 的很多特性将会莫名奇妙的不起作用,如进行屏幕截图,或者使用System.Windows.Form.Timer对象也不行。由于Windows服务具有难以调试的特点,如果不注意这点,你反复检查自己的代码,都很难发现问题的所在的,我开始就是摸索了很久才发现,呵呵。

Windows服务的优点有:1. 能够自动运行。2. 不要求用户交互。3. 在后台运行。

一般情况下,Windows服务被用于耗费时间很多的进程中,例如备份数据库,数据同步等等。 

本文介绍如何开启Windows服务桌面交互的设置,以便进行屏幕监控的功能开发,首先介绍一下屏幕监控的程序--绿苗帮电脑监控软件,它是随系统自动启动,在服务中定时进行屏幕截图的一个小软件,给家长提供监控小孩电脑使用情况使用的,系统管理界面如下所示 。



Windows服务默认情况下,不支持进行屏幕截图的,需要在安装程序的时候,把系统的参数修改一下才可以,下面是两种方式实现该功能的开启 :

        private   void  serviceInstaller_AfterInstall( object  sender, InstallEventArgs e)
        {
            
base .OnAfterInstall(e.SavedState);

            ManagementObject wmiService 
=   null ;
            ManagementBaseObject InParam 
=   null ;
            
try
            {
                wmiService 
=   new  ManagementObject( string .Format( " Win32_Service.Name='{0}' " , Constants.ServiceName));
                InParam 
=  wmiService.GetMethodParameters( " Change " );
                InParam[
" DesktopInteract " =   true ;
                wmiService.InvokeMethod(
" Change " , InParam,  null );
            }
            
finally
            {
                
if  (InParam  !=   null )
                    InParam.Dispose();
                
if  (wmiService  !=   null )
                    wmiService.Dispose();
            }
        }

另一种方式是通过注册表操作函数实现参数的修改:

         protected   override   void  OnCommitted(System.Collections.IDictionary savedState)
        {
            
base .OnCommitted(savedState);

            
using  (RegistryKey ckey  =  Registry.LocalMachine.OpenSubKey( @" SYSTEM\CurrentControlSet\Services\ "   +  Constants.ServiceName,  true ))
            {
                
if  (ckey  !=   null )
                {
                    
if  (ckey.GetValue( " Type " !=   null )
                    {
                        ckey.SetValue(
" Type " , ((( int )ckey.GetValue( " Type " ))  |   256 ));
                    }
                }
            }
        }

最终达到的效果就是注册表的参数修改了,如下图所示:

 

 本文转自博客园伍华聪的博客,原文链接:设置Windows服务允许进行桌面交互,实现屏幕监控,如需转载请自行联系原博主。



目录
相关文章
|
14天前
|
NoSQL Redis Windows
windows服务器重装系统之后,Redis服务如何恢复?
windows服务器重装系统之后,Redis服务如何恢复?
39 6
|
14天前
|
Java 应用服务中间件 Windows
windows服务器重装系统之后,Tomcat服务如何恢复?
windows服务器重装系统之后,Tomcat服务如何恢复?
30 10
|
14天前
|
消息中间件 Java Kafka
windows服务器重装系统之后,Kafka服务如何恢复?
windows服务器重装系统之后,Kafka服务如何恢复?
19 8
|
9天前
|
存储 开发者 Windows
WINDOWS 环境变量设置方法
本文旨在帮助使用Windows电脑的开发者们为其设备配置环境变量,以更好地支持大模型应用的开发工作。文中详细介绍了三种配置方法:一是将环境变量设置为系统级变量;二是在命令行界面通过`SET`命令或`PowerShell`临时设置变量;三是借鉴MAC的方式,创建全局环境变量文件`.zshrc`进行配置。这些方法简单实用,便于根据实际需求选择适合的方式进行配置。
|
8天前
|
安全 Windows
电脑进入桌面后操作无响应?不妨试试禁用Windows Search服务
电脑进入桌面后操作无响应?不妨试试禁用Windows Search服务
|
8天前
|
API Windows
MASM32编程获取Windows当前桌面主题名
MASM32编程获取Windows当前桌面主题名
|
1月前
|
网络安全 虚拟化 Windows
windows 11安装openSSH server 遇到的"kex_exchange_identification: read: Connection reset"问题
windows 11安装openSSH server 遇到的"kex_exchange_identification: read: Connection reset"问题
|
2月前
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
|
2月前
|
开发框架 .NET API
Windows Server 2022 安装IIS 报错 访问临时文件夹 C:\WINDOWS\TEMP\3C 读取/写入权限 错误: 0x80070005
Windows Server 2022 安装IIS 报错 访问临时文件夹 C:\WINDOWS\TEMP\3C 读取/写入权限 错误: 0x80070005
86 0
|
2月前
|
Linux Docker Windows
Windows——Docker拉取Windows Server镜像
Windows——Docker拉取Windows Server镜像
111 0
下一篇
无影云桌面