摘要:许多老服务器程序并不是基于Windows服务构建的,而是依赖于WinForm或控制台窗口。这些程序通常需要一个看门狗程序来监控其运行状态,并在崩溃时自动重启。
许多老服务器程序并不是基于Windows服务构建的,而是依赖于WinForm或控制台窗口。这些程序通常需要一个看门狗程序来监控其运行状态,并在崩溃时自动重启。
然而,传统的第三方看门狗程序在服务器重启后用户未登录的情况下无法自行启动,这给系统的稳定性和可靠性带来了挑战。
本文将介绍如何通过改造现有程序,将其转变为无界面的Windows服务,并探讨在这个过程中遇到的问题和解决方案。
项目介绍项目的目标是开发一个.NET基于WinForm/Windows服务的看门狗程序。
项目分为两部分:
第一部分是复现原有的第三方看门狗功能,并将其升级到.NET 5.0,使其可以独立发布;
第二部分则是实现Windows服务版本的看门狗程序,解决在Windows服务中启动带窗口的EXE程序时遇到的各种问题。
项目功能1、程序监控与自动重启监控目标应用程序的运行状态,在程序崩溃或异常退出时自动重启。
2、日志记录记录所有操作日志,便于后续分析和排查问题。
3、远程管理支持通过网络接口进行远程配置和管理。
4、兼容性提升升级到.NET 5.0,提高跨平台兼容性,减少对特定.NET Framework版本的依赖。
项目特点独立部署:不再依赖目标机器上的.NET Framework环境,减少了安装和维护的复杂度。
高可用性:即使在系统重启后用户未登录的情况下,也能确保关键应用程序的正常运行。
灵活性:支持多种启动方式和服务模式,适应不同的业务需求。
安全性增强:通过权限管理和日志审计,提升了系统的安全性。
项目技术1、Windows服务
使用Windows服务作为后台守护进程,确保服务的持续运行。
2、Topshelf 库
简化Windows服务的创建和管理过程。
3、Session隔离处理
采用CreateProcessAsUser等API突破Session 0隔离,尝试启动带UI的桌面程序(尽管最终证明这条路行不通)。
4、.NET 5.0:升级框架版本,提供更好的性能和更广泛的平台支持。
项目效果经过多次试验和调整,我们发现直接从Windows服务启动带UI界面的桌面程序在用户未登录的情况下是不可行的。
这是因为从Windows Vista开始,服务程序位于SESSION 0,而桌面程序位于SESSION 1-X。这意味着即便成功启动了桌面程序,也不会有UI界面显示出来。
因此,最终的解决方案是将原有的WinForm或控制台程序改造为无界面的Windows服务,并将原先的界面实时显示打印功能转移到日志记录或Web页面中去。这样不仅解决了开机未登录自启的问题,还提高了系统的整体稳定性。
守护服务
添加监控项
监控列表
日志记录
Gitee:https://gitee.com/ldming/watch-dog
总结通过这个项目,我们深刻认识到在Windows服务中直接启动带UI界面的应用程序存在诸多限制和挑战。
最终的解决方案是将原有程序改造为无界面的服务,并将界面相关的功能迁移到日志或Web页面中。这
样做不仅解决了开机未登录自启的问题,还增强了系统的可靠性和易用性。
关键词、、、、、、、、、
来源:opendotnet