windows 服务程序和桌面程序集成(一)

news2024/11/19 19:34:02

本系列文章介绍如何将windows服务程序和桌面程序集成在一起,也就是说一个EXE程序,既可以作为服务程序运行,也可以作为桌面程序运行的双模程序。

在十几年前,曾经给客户开发一套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服务程序和桌面程序是两种不同的应用程序类型,它们在运行方式、交互方式和执行环境等方面存在差异。

  1. 运行方式:

桌面程序通常是由用户手动启动的,用户可以通过图形用户界面(GUI)与其交互。而Windows服务程序通常在Windows操作系统启动时就开始运行,并在后台持续运行,通常不需要用户手动启动,也没有GUI。

  1. 交互方式:

桌面程序通常通过GUI与用户进行交互,例如显示窗口、菜单、按钮、文本框等,用户可以使用鼠标、键盘等输入设备与其交互。而Windows服务程序通常不需要用户交互,它们在后台运行,执行特定的任务或提供服务,例如运行网络服务器、备份数据等。

  1. 执行环境:

桌面程序通常在用户交互的环境中运行,例如Windows桌面、移动设备等。而Windows服务程序通常在Windows操作系统的服务控制器中运行,它们以系统级别运行,具有更高的权限和安全性,可以在系统启动时启动,一直运行到系统关闭。

总的来说,Windows服务程序和桌面程序的区别在于它们的运行方式、交互方式和执行环境等方面。Windows服务程序是一种后台程序,通常在Windows操作系统启动时就开始运行,并在后台持续运行,提供特定的服务或执行特定的任务。而桌面程序则是用户手动启动的程序,通常在GUI中显示窗口、菜单、按钮等,用户可以使用鼠标、键盘等输入设备与其交互。

未完,待续.....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/388358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++016-C++结构体

文章目录C016-C结构体结构体目标结构体定义结构体实例化结构体题目描述在线练习:总结C016-C结构体 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 结构体 参考:https://www.cnblogs.com/ybqjymy/p/16561657.html https://…

【Day1】一小时入门 python 基础,从安装到入门

文章目录python安装安装python安装 pycharmpython基础输出注释变量输入类型转换运算符自增字符串相关操作比较运算符逻辑运算符条件控制while循环list 列表for 循环range函数元组python 安装 安装python 官网进行下载:官网下载地址这里下载的一直是最新版本的 点…

嵌入式linux必备内存泄露检测神器

Valgrind介绍 Valgrind是一个可移植的动态二进制分析工具集,主要用于发现程序中的内存泄漏、不合法内存访问、使用未初始化的内存、不正确的内存释放以及性能问题等,可在Linux和Mac OS X等平台上使用。 Valgrind由多个工具组成,其中最常用的…

Linux操作系统学习(文件缓冲区)

文章目录缓冲区fork后的缓冲区缓冲区 什么是缓冲区? ​ 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区。 缓冲区分为内核缓冲区和用户缓冲区 ​ 内核缓冲区是…

【Linux】P2 vi/vim 编辑器

vim编辑器vim 编辑器介绍vim 三种工作模式vi/vim 操作打开/创建文件命令模式快捷指令底线模式快捷指令前言 上节内容: Linux 基本命令 链接: https://blog.csdn.net/weixin_43098506/article/details/129298221 本节内容: Linux vi 编辑器。 …

STM32 10个工程篇:1.IAP远程升级(一)

清晨一大早起来开始撰写STM32 10个例程篇的第一章即串口IAP远程升级,虽然网络上有很多免费和付费的STM32教程,但是仍然不断地说服自己沉住气、静下心写一份独一无二的,这份独一无二中也凝聚了一名MCU工程师5年间不断地项目迭代积累&#xff0…

总结磁共振成像的脑龄预测的人工智能模型

脑龄预测的人工智能模型 介绍基于神经影像的BA预测BA预测建模:从统计方法到DL统计方法使用统计/最大似然估计方法的BA研究的主要结果深度学习使用DL方法进行BA研究的主要结果可解释的人工智能(即可解释的深度学习方案)可解释的能力(Interpretability,)、可因果性和可解释性…

剑指 Offer —— 数组和字符串

文章目录剑指 Offer 04. 二维数组中的查找代码实现解题方案 思路算法步骤剑指 Offer 05. 替换空格题目描述代码实现解题方案 思路算法步骤剑指 Offer 11. 旋转数组的最小数字 - 解决方案题目描述代码实现剑指 Offer 04. 二维数组中的查找 在一个 n * m 的二维数组中&#xf…

csdn写文章自定义表格怎么做

前言 CSDN写文章时,经常会用到表格,不同于Word文档中直接插入表格(自定义几行几列),使用CSDN自带的md文本编辑器时,很难快速插入想要的表格样式,追究原因,也是因为md的语法问题&…

C语言刷题(4)——“C”

各位CSDN的uu们你们好呀,今天小雅兰的内容又到了我们的复习啦,那么还是刷题噢,话不多说,让我们进入C语言的世界吧 BC55 简单计算器 BC56 线段图案 BC57 正方形图案 BC58 直角三角形图案 BC59 翻转直角三角形图案 BC60 带空格…

Python计算分类问题的评价指标(准确率、精确度、召回率和F1值,Kappa指标)

机器学习的分类问题常用评论指标有:准确率、精确度、召回率和F1值,还有kappa指标 。 每次调包去找他们的计算代码很麻烦,所以这里一次性定义一个函数,直接计算所有的评价指标。 每次输入预测值和真实值就可以得到上面的指标值&a…

Camtasia2023电脑屏幕录像视频编辑录屏软件

Camtasia是一款专业的录屏软件,由TechSmith开发。它旨在帮助用户创建高质量的视频内容,包括演示、培训视频、演讲录像、教程等等。 Camtasia适合于需要制作视频教程、软件演示、游戏录像等内容的个人和企业用户。例如,软件开发人员可以使用它…

JUC并发编程与源码分析笔记10-聊聊ThreadLocal

ThreadLocal简介 恶心的大厂面试题 ThreadLocal中ThreadLocalMap的数据结构和关系ThreadLocal的key是弱引用,这是为什么ThreadLocal内存泄漏问题你知道吗ThreadLocal中最后为什么要加remove方法 是什么 ThreadLocal提供线程局部变量。这些变量与正常的变量不同&…

基于神经辐射场(Neural Radiance Fileds, NeRF)的三维重建- 简介(1)

Nerf简介 Nerf(neural Radiance Fileds) 为2020年ICCV上提出的一个基于隐式表达的三维重建方法,使用2D的 Posed Imageds 来生成(表达)复杂的三维场景。现在越来越多的研究人员开始关注这个潜力巨大的领域,也…

十大排序(C++版)

测试排序的题目&#xff1a; 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 堕落的做法&#xff1a; class Solution { public:vector<int> sortArray(vector<int>& nums) {sort(nums.begin(),nums.end());return nums;} };视频推荐&#xff1a; …

洛谷:P1554 梦中的统计 JAVA

思路&#xff1a;定义一个长度为10的数组&#xff0c;数组下标代表数组元素的数字&#xff0c;比如arr[0]代表数字0.用一个for循环&#xff0c;对每个数先取余再取整&#xff0c;知道取整得到的数为0&#xff0c;说明该数字已经被拆解完了。今天又学了一个输入&#xff0c;原来…

2020蓝桥杯真题美丽的2(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝特别喜欢 2&#xff0c;今年是公元 2020 年&#xff0c;他特别高兴。 他很好奇&#xff0c;在公元 1 年到公元 2020 年&#xff08;包含&#xff09;中&#xff…

论文投稿指南——中文核心期刊推荐(电影、电视艺术)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

73. python第三方库安装教程(超详细)

73. python第三方库安装教程&#xff08;超详细&#xff09; 文章目录73. python第三方库安装教程&#xff08;超详细&#xff09;1.知识回顾2. openpyxl 库的作用3. 第三方库的安装步骤【警告内容释义】4. 更新pip5. pip 常用命令1. 什么是pip2. pip --version 查看 pip 版本和…

车载雷达实战之Firmware内存优化

内存&#xff08;Memory&#xff09;是计算机中最重要的部件之一&#xff0c;计算机运时的程序以及数据都依赖它进行存储。内存主要分为随机存储器&#xff08;RAM&#xff09;,只读存储器&#xff08;ROM&#xff09;以及高速缓存&#xff08;Cache&#xff09;。仅仅雷达的原…