我使用我的框架构建了四种不同“类型”的应用程序:
1) Windows 服务 2) 正常应用 3) 服务应用程序(具有 Windows 服务功能但具有本地 GUI 控制台和自动升级能力的普通应用程序) 4) 远程GUI控制台
现在我可以通过代码检测应用程序是否是 Windows 服务。但目前为了在其他之间进行检测,我使用需要添加到项目文件中的定义。如果可能的话,我想找到一种不依赖 DEFINES 的替代方法。我最初的想法是使用项目版本信息的“注释”字段。
有什么想法吗?
编辑:我正在寻求一种无论我如何“键入”应用程序都有效的通用技术。目前,我使用项目配置中的 DEFINES,它可以工作,但使代码比使用“if”代码开关稍微困惑,并且因为它存储在 .dproj 文件中,所以可以从 View 中隐藏。
解决方案:根据 David 的建议,我最初使用条件定义(以及任何其他信息,例如应用程序是否作为 Windows 服务运行)将所有应用程序映射到 4 种应用程序类型之一,存储在全局可访问的对象中。除非链接的文件对于包含在特定应用程序类型中没有意义,否则我用代码替换了几乎所有条件编译标志,这显着提高了代码的可读性。我还实现了一些其他“调整”,但这是基本实现。
最佳答案
根据您使用Application
全局变量的方式,您可以通过检查此全局变量的类型来检测您的应用程序是服务、VCL还是控制台应用程序。对于控制台应用程序,您可以使用 System.IsConsole
变量。
function ApplicationIsService(Component:TComponent):Boolean;
begin
Result:=Component.ClassName='TServiceApplication';
end;
function ApplicationIsVcl(Component:TComponent):Boolean;
begin
Result:=Component.ClassName='TApplication';
end;
你可以这样使用
if ApplicationIsVcl(Application) then
//do something
else
if ApplicationIsService(Application) then
//do something else
else
if IsConsole then
//do another thing
关于delphi - 自动检测应用程序 "Type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6052896/