gpt4 book ai didi

delphi - 自动检测应用程序 "Type"

转载 作者:行者123 更新时间:2023-12-03 18:33:45 25 4
gpt4 key购买 nike

我用我的框架构建了四种不同“类型”的应用程序:

1) 视窗服务
2) 正常应用
3) 服务应用程序(具有 Windows 服务功能但具有本地 GUI 控制台和自动升级能力的普通应用程序)
4) 远程 GUI 控制台

现在我可以通过代码检测应用程序是否为 Windows 服务。但是目前为了在其他人之间进行检测,我使用了需要添加到项目文件中的 DEFINES。如果可能的话,我想找到一种不依赖于 DEFINES 的替代方法。我最初的想法是使用项目版本信息的 Comments 字段。

有任何想法吗?

编辑:我追求的是一种无论我如何“键入”我的应用程序都可以工作的通用技术。目前,我使用项目配置中的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com