守护神
在上一篇文章《》中,我们通过windows的服务管理功能,让服务具备了自我守护的能力。
服务的自我守护
让服务保持持续运行,避免服务挂掉,除了利用windows系统的服务管理功能,让服务自我守护之外,我们还有一个选择,就是守护进程。
可以专门编写一个新的程序,这个程序不做其他工作,只做一件事情,就是保护其他的服务,当然保护程序也是一样的。实现的方法非常简单,就是定期检查服务是否在正常运行。如果检测到服务已经没有运行,则尝试重启服务。
当然这个程序不需要用户感知到,在后台默默运行即可。所以最适合的就是服务。
但是经过外老师的尝试,通过服务启动服务,始终没有成功。于是只好退而求其次,通过后台进程来实现服务的保护。
编写保护进程在开始编写保护程序之前,我们先将【MyService1】的自动重启选项取消:
取消自动恢复
我们编写一个WinForm程序:
创建WinForm程序
设置程序的名称等参数:
项目名称
由于我们的保护程序不需要界面,故我们将VS自己生成的界面代码Form1.cs删掉:
删除原来的Form1
然后我们将【Program.cs】中的Main函数中的Application.Run进行修改,删掉其参数。这样程序就可以了无界面运行了。
屏蔽Form1参数
接下来我们编写保护服务的代码,监控服务的运行状态,并在服务停止之后,自动重启。
我们只监控一个服务,就是我们之前编写的【MyService1】。
代码如下:
编写保护服务模块的代码
大家可以根据自己的实际情况,调整监测服务的时间间隔。并可以根据自己的需要,调整监控服务的逻辑代码。
当然,保护其他进程的原理和这个类似。
下面修复一些代码错误。
首先是要添加对【System.ServiceProcess.dll】的引用。因为ServiceController的实现在这个库里面。
添加引用
然后修复Thread.Sleep(1000);的错误:
修复错误
现在在Main函数中,启动监听线程:
启动监测线程
由于启动服务,对于权限要求较高,需要我们的保护程序,以管理员方式运行。
下面我们将程序配置为自动请求管理员权限:
在项目的【属性】中,在【安全性】选项卡里面,启用【Click Once 安全设置】:
启用Click Once安全设置
然后再关闭【Click Once 安全设置】,没错,是再次关闭。因为ClickOnce程序无法设置管理员权限。我们此举的目的,在于为项目自动创建【app.manifest】配置文件。在这个配置文件中,可以配置程序的默认权限请求。
关闭 Click Once 安全设置
下面就来修改【app.manifest】中的权限设置:
修改权限设置
修改设置
最后生成我们的项目:
生成项目
然后我们到生成目录里面,可以看到我们的保护程序【SvcProtector.exe】的图标,已经有一个盾牌标了。这个盾牌标,表示我们的程序会默认以管理员运行。
程序带盾牌标
我们双击【SvcProtector.exe】启动保护程序,如果你的系统没有关闭管理员权限提示,你将看到系统弹出的权限请求提示。
点击允许,启动程序。然后我们在任务管理器里面,可以看到我们的服务【TestService】已经自动启动了。
保护程序启动成功
我们可以尝试强制结束【TestService】,然后不到1秒的时间,会马上重启。
这说明我们的服务已经被保护起来了。
关闭保护程序
当然,因为我们的保护程序没有界面,所以如果要停止保护程序,只能像上图中那样,强制结束掉进程【SvcProtector】。
当然,如果需要我们的保护程序,开机的时候,自动启动,我们创建一个【SvcProtector.exe】的快捷方式,然后拷贝到【C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp】即可。
创建快捷方式
拷贝
粘贴
这样我们的电脑一旦启动,就会自动开启保护程序,然后会启动我们的服务。并一直保护服务的运行。
终于写完了! 感谢您看到这里,希望您一切顺利。
踩坑记录刚开始保护进程使用服务来实现,因为正好服务没有界面,但是遇到启动【MyService1】失败。报错为:
启动.上的服务“MyService1”失败,拒绝访问。
原因可能是服务的权限不足,导致无法启动被保护的服务。真正的原因还没定位到。。。
后台使用后台进程,替换服务,来实现保护进程。
通过服务来做保护进程失败
开机启动失败尝试了创建快捷方式和修改开机启动项两种方式,结果保护程序都无法开机启动!
修改注册表开机启动
以为是*毒软件的原因,但是关掉了*毒软件还是不行。
经过我多方查探,终于找到解决办法了!
在开始菜单里面搜索【组策略】,打开【编辑组策略】,然后禁用【用户账户控制:以管理员批准模式运行所有管理员】即可。具体见下图:
禁用选项
下期预告如何让限制只能启动一个程序
让控制台程序转换为服务运行
敬请期待。。。
下一篇文章《》,欢迎检阅!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved