Delphi Windows服务设计
我从未创建过Windows服务,但一直在阅读我发现的所有内容.我遇到的所有文章或示例都是非常基础的,并且范围有限.没有看到任何超出此范围的内容或针对特定方案的内容.所以,我有可能找到的所有理论,现在我已经准备好深入研究这个项目了.我喜欢布置我的想法,并对人们的想法得到一些反馈.我将从应用程序中描述我需要的内容以及我打算如何构建它.我很感激任何有建立Windows服务经验的人的评论以及他们愿意分享的任何建议.
[SCENARIO]现在我有一个应用程序(我称之为UPDATEAPPLICATION),它为我们所有其他应用程序提供更新.为了运行我们的任何应用程序,首先必须运行此UPDATEAPPLICATION程序并向其传递所需应用程序的参数.UPDATEAPPLICATION调用WebService,该WebService返回关于所需应用程序是否有任何更新的XML信息.
如果有更新,UPDATEAPPLICATION将以EXE或ZIP格式下载更新,并替换相应的文件以更新目标应用程序.然后UPDATEAPPLICATION执行ShellExecute以启动所需的应用程序,然后关闭UPDATEAPPLICATION.
这是一个相当基本的过程,多年来一直运作良好.UPDATEAPPLICATION程序是一个Delphi应用程序,我们的其他应用程序是混合的:Delphi,VB6,MS Access,.NET.
[问题]随着迁移到Vista和Windows 7,安全性发生了巨大变化.由于UPDATEAPPLICATION的性质,UAC将不允许应用程序在没有Admin访问或UAC完全关闭的情况下运行.我们正在将许多应用程序升级到.NET,在此过程中,我希望应用程序以及UPDATEAPPLICATION符合UAC标准.根据我的研究,唯一的方法是将UPDATEAPPLICATION创建为Windows服务.因此,基本上,我需要将UPDATEAPPLICATION的功能复制到Windows服务体系结构中.
[我的设计]我正在使用DelphiXE2.我的设计将由3个部分组成,形成一个解决方案:Windows服务,与Windows服务交互的小托盘应用程序,以及将重新设计的应用程序,它们将向Windows服务发送消息.
[UPDATESERVICE]将收听消息.如果它收到USERAPPLICATION已启动的消息,它将调用Web服务以查看是否有更新.如果有,将通知用户关闭应用程序并允许UPDATESERVICE更新应用程序.UPDATESERVICE将下载相应的文件并更新应用程序.
现在我已经解释了我正在尝试做的基础知识,我可以问我需要回答的具体问题.这些都与我应该如何构建我的Windows服务有关.我还计划使用OmniThread进行线程管理.
当我的服务启动时,我需要创建TCP服务器.
这是我的全部问题.对此可能没有正确/错误的答案,而只是基于经验的偏好.如果你用Delphi构建服务,你可能会有一些我认为有用的输入.如果你有一个更健壮的项目,那么基本的"启动服务和睡眠"并愿意分享它 - 即使我没有运行或只是伪造代码 - 我相信这将是非常宝贵的.感谢您阅读我冗长的问题.如果您能想出更好的方法,请分享您的想法.我将补充说,我们的一些应用程序可以由公众下载和运行,因此我无法完全控制预期的环境.任何建议/意见/帮助将不胜感激.