我有点疑惑为什么,当你在Delphi XE2中创建一个新的服务应用程序时,它是否包含这3个可视组件单元?
Vcl.Controls Vcl.Dialogs Vcl.Graphics
据我所知,这些单位中没有任何服务需要的东西.我可以看到Graphics单元可能用于某种图像处理,但这是开发人员实现它的问题.是否有一些理由将这些单元自动包含在新的服务应用程序中?如果我删除它们,它不会伤害任何东西……或者是吗?
解决方法
这是由IDE代码生成器添加的,“以防万一”……
IDE主要创建表单,因此即使您的服务中不需要UI,它也会将其添加到您的服务模块中.
IDE主要创建表单,因此即使您的服务中不需要UI,它也会将其添加到您的服务模块中.
有趣的是,自Windows Vista / Seven以来,服务不再能够将GDI消息发送到桌面,即与之交互.因此,甚至没有可能从Windows服务使用对话框或UI控件.
事实上,甚至SvcMgr.pas链接到Forms.pas Dialogs.pas单位.因此,删除您自己单位中的参考将继续将这些单位链接起来.
SvcMgr.pas似乎需要Forms.pas Dialogs.pas单元,以便在命令行上安装服务时显示一些潜在的错误消息.
实际上,您的服务.exe不仅仅是作为服务在后台运行.它也可以从命令行运行,就像常规应用程序一样,以便安装/卸载/启动/停止服务.
您可以查看our lighter implementation of Windows services in Delphi – 但不是相同的功能 – 只需使用API.此版本不链接到Forms.pas和Dialogs.pas单位.