本系列文章介绍如何将windows服务程序和桌面程序集成在一起,也就是说一个EXE程序,既可以作为服务程序运行,也可以作为桌面程序运行的双模程序。
![](https://i-blog.csdnimg.cn/blog_migrate/ee12f1110e73cd54577e3c29d46ce998.png)
在十几年前,曾经给客户开发一套C/S架构的出单程序,当时不是很清楚windows的服务程序,服务器端开发的是一个桌面程序,运行在客户的服务器上,安装上以后运行正常。过了一段时间,客户服务器因为断电还是什么原因重启动了,我们的桌面服务程序就没有启动,当时想那就把我们的服务程序放在windows的启动程序中,这样windows启动后我们的程序不就运行了吗?想得太简单了,因为windows的启动程序要在windows正确登录成功后才会启动我们的程序,否则即便是服务器重启动了,因为没有登录,也无法启动我们的程序。后来才知道有windows的服务程序,此后所有的后台服务都已经写成了windows服务程序。
但是随之而来又有一个问题,那就是windows服务程序没有界面,运行必须要进行安装-启动等才能运行,调试windows服务程序非常困难,一直在想能否把windows服务程序和桌面程序集成在一起,做成双模的程序。当时记得有一个控件,有一个国外公司开发的,可以通过这个控件实现windows服务程序的调试,但是需要购买,最主要的是试用了下,也不是很方便,经常死机。
所以当时的做法就是先做成一个桌面程序,把“所有的功能”都先调试好,然后再改写成windows服务程序,有点麻烦但总是可以。可以因为总不能实现“所有的功能”,开发中随时有问题需要解决,这样就不断在桌面程序和windows服务程序间切换、调试,很是艰难。几年前有一天,我看到了Delphi Cook这本书上有介绍如何实现windows服务程序和桌面程序集成在一起,我立即测试,验证终于实现windows服务程序和桌面程序集成在一起。但也有个问题,就是每次都需要手动通过命令行注册,启动服务,我的设想是能否在桌面程序上实现windows服务程序的注册、安装、运行、停止、卸载。我发现Inno Setup安装程序可以实现windows服务程序的注册、安装、卸载。因为Inno Setup使用的Pascal Script,就是解释型Pascal语言,于是就把Inno Setup 中实现windows服务程序的注册、安装、卸载等功能移植成Delphi的函数。终于实现了将windows服务程序和桌面程序集成在一起!
跟随本系列文章,我将介绍Delphi如何实现将windows服务程序和桌面程序集成在一起!
本文先介绍基础概念!
下面是ChatGPT回答的关于”windows服务程序和桌面程序的区别是什么“
Windows服务程序和桌面程序是两种不同的应用程序类型,它们在运行方式、交互方式和执行环境等方面存在差异。
运行方式:
桌面程序通常是由用户手动启动的,用户可以通过图形用户界面(GUI)与其交互。而Windows服务程序通常在Windows操作系统启动时就开始运行,并在后台持续运行,通常不需要用户手动启动,也没有GUI。
交互方式:
桌面程序通常通过GUI与用户进行交互,例如显示窗口、菜单、按钮、文本框等,用户可以使用鼠标、键盘等输入设备与其交互。而Windows服务程序通常不需要用户交互,它们在后台运行,执行特定的任务或提供服务,例如运行网络服务器、备份数据等。
执行环境:
桌面程序通常在用户交互的环境中运行,例如Windows桌面、移动设备等。而Windows服务程序通常在Windows操作系统的服务控制器中运行,它们以系统级别运行,具有更高的权限和安全性,可以在系统启动时启动,一直运行到系统关闭。
总的来说,Windows服务程序和桌面程序的区别在于它们的运行方式、交互方式和执行环境等方面。Windows服务程序是一种后台程序,通常在Windows操作系统启动时就开始运行,并在后台持续运行,提供特定的服务或执行特定的任务。而桌面程序则是用户手动启动的程序,通常在GUI中显示窗口、菜单、按钮等,用户可以使用鼠标、键盘等输入设备与其交互。
![](https://i-blog.csdnimg.cn/blog_migrate/85a1f89559071d23742d73abf843948c.png)
未完,待续.....