设置Windows运维服务允许进行桌面交互,实现屏幕监控
诗诗 2018-03-15 来源 :网络 阅读 1944 评论 0

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

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

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

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

本文介绍如何开启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运维服务允许进行桌面交互,实现屏幕监控

希望这篇文章可以帮助到你。总之,同学们,你想要的职坐标IT频道都能找到!


本文由 @诗诗 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved