调试 Delphi 的 Service 工程

Delphi Android Service 前台服务与后台保活拆解 在 Android 中,后台任务并不是把线程藏在 Activity 里就能长期运行;Android Service 通过独立组件承载逻辑,并以生命周期回调、前台服务和通知渠道保证可见性与存活。其技术价值在于界面关闭后仍能执行定位上报、消息轮询、定时同步等任务,同时通过清单声明、权限与启动标志降低被系统回收的概率。围绕 Delphi Android Service Demo,可进一步理解 TAndroidService 生命周期、TLocalServiceConnection 启动与绑定、START_REDE 阅读详情

问题

使用 Delphi 创建一个 Windows Service 工程,编译后可以安装为一个 Windows 的服务。这样的工程,在 Delphi IDE 里面,没有办法 Debug,一运行就退出了。

解决方案

在工程的源代码里面,增加一些编译器指令,在 Debug 模式下,添加代码,把程序当作一个终端程序,并且执行 Readln 阻塞住不要退出,就可以进行断点调试了。

代码如下

program MyServicePro;

{$IFDEF DEBUG}
  {$APPTYPE CONSOLE}   // 调试模式下启用控制台
{$ELSE}
  {$APPTYPE GUI}       // 发布模式下使用 GUI(服务)
{$ENDIF}

uses
  {$IFDEF DEBUG}
  Forms,
  {$ELSE}
  Vcl.SvcMgr,
  {$ENDIF }
  Web.WebReq,
  IdHTTPWebBrokerBridge,
  MyService in 'UMyService.pas' {YmDnsService: TService},
  DnsDataImpl in '..\Server\DnsDataImpl.pas',
  DnsDataIntf in '..\Server\DnsDataIntf.pas',
  WebModuleUnit1 in '..\Server\WebModuleUnit1.pas' {WebModule1: TWebModule},
  UDmWebServer in 'UDmWebServer.pas' {DmWebServer: TDataModule};

{$R *.RES}

begin
  if WebRequestHandler <> nil then
    WebRequestHandler.WebModuleClass := WebModuleClass;

  {$IFDEF DEBUG}
  var B: Boolean;
  Application.Initialize;
  Application.CreateForm(TMyService, MyService);
  Application.CreateForm(TDmWebServer, DmWebServer);
  YmDnsService.ServiceStart(nil, b);
  Readln;
  {$ELSE}
  if not Application.DelayInitialize or Application.Installing then
    Application.Initialize;
  Application.CreateForm(TMyService, MyService);
  Application.CreateForm(TDmWebServer, DmWebServer);
  Application.Run;
   {$ENDIF}
end.

另外一个需要注意的问题

如果你仔细读上面的代码,你会发现我在这里使用了 IdHTTPWebBrokerBridge,这个玩意是用来在这个服务程序里面,内置一个 WEB Server 。

这里就需要有代码启动 WEB Server,打开监听端口。这里需要注意的是,在 Service 模式的程序里面,不要 Service 一启动就立即启动 Web Server,这里必须延时一下再启动,否则会出现异常。异常信息大概是:

raised exception class EIdWinsockStubError with message 'Error on call to Winsock2 library function shutdown: 应用程序没有调用 WSAStartup,或者 WSAStartup 失败。'.

延迟启动的大致代码:

FServer: TIdHTTPWebBrokerBridge;

procedure TDmWebServer.DataModuleCreate(Sender: TObject);
begin
  FServer := TIdHTTPWebBrokerBridge.Create(Self);
  FServer.Bindings.Clear;
  FServer.DefaultPort := Self.FPort;
  TTask.Run(
  procedure
  begin
    Sleep(1000);
    FServer.Active := True;
  end
  );
end;

 

Delphi调用Android Service:FMX后台服务Demo完整实战指南 Android Service作为系统核心组件,为应用提供独立于界面的后台执行能力。随着系统对后台任务的限制日益严格,前台服务成为保障任务持续运行的可靠方案。Delphi开发者通过JNI桥接机制,无需改写核心Object Pascal代码,即可在FMX工程中直接驱动原生Service,实现定时任务、周期上报、消息监听等典型场景。本文梳理了从选型思路、清单配置到Java类封装、Java2OP生成JNI单元、Delphi侧启停服务的完整链路,并针对服务被回收、通知不显示等高频问题给出排查方法。通过理解Servi 阅读详情

相关推荐

Delphi中实现Android Service:后台服务与前台通知完整指南

Android应用退至后台后,如何继续执行核心任务一直是开发者的普遍痛点。Service作为Android四大组件之一,是承载后台任务的系统级方案。在Delphi环境下,通过JNI桥接Java壳与Pascal逻辑,可以构建稳定高效的Android后台服务。本文从Service的生命周期与运行原理切入,重点解析前台服务、通知栏权限以及Android 8.0之后的startForeground机制。同时结合一个每10秒打印时间的可运行Demo,演示如何配置AndroidManifest、动态申请通知权限,并解决

weixin_29195615的博客 157

用Delphi编写Windows服务(Service)

    Windows的服务是一个比较实用的功能,你的程序可以在Windows未进行登录的时候就开始运行,不受用户注销的影响,也不容易被用户误关闭。     但是编写服务也许不是一件容易的事情,幸好Delphi给我们提供了一个模板,可以很容易的编写一个标准的Windows服务程序。     首先,在Delphi内新建一个Service Application。     此时,Delph

bell的专栏 2053

Delphi开发Android后台Service完整指南:从JNI到前台服务

在移动应用开发中,后台任务是支撑位置采集、日志上报、定时同步等场景的基石。Android系统提供的Service组件,正是承载这类长期运行操作的核心机制。然而在跨平台开发框架下,如何突破封装边界、直接与系统机制对话,是许多开发者面临的真实挑战。Delphi作为老牌RAD工具,其FireMonkey框架对Android Service的封装十分有限,开发者必须通过JNI接口自行映射Service生命周期、线程模型与注册方式。理解Java层与Object Pascal层的对应关系,掌握广播通信、前台服务、通知渠

weixin_31887307的博客 208

Delphi 在Windows 11中开发Windows服务:最佳实践和工具

介绍delphi 11 开发windows 服务程序,并介绍在Delphi IDE中调试服务程序的方法。

sensor_WU 博客 3987

Delphi Android Service 实战:后台常驻与前台服务避坑指南

Android 后台限制严格,普通线程在应用退至后台后会被挂起,需借助 Service 实现常驻逻辑。Delphi 通过 TAndroidService 封装 Started 与 Bound Service,前台服务则需结合通知栏与权限配置。掌握跨进程通信、前台服务保活及 Manifest 配置,可有效解决定时任务中断、Socket 断连等工程痛点。本文围绕 Delphi Android Service Demo,详解从创建、通信到保活的完整实践,助你避开常见翻车点。

weixin_29191081的博客 313

Delphi Android Service Demo:后台服务生命周期骨架

Android Service 是运行在应用进程内、没有界面的组件;Started Service 通过 startService 或 startForegroundService 启动,Bound Service 通过 bindService 建立连接。其核心原理是系统回调 onStartCommand,传入 Flags、StartId 与 Intent,并通过 START_STICKY 等返回值影响服务被杀后的重建策略;服务回调默认在主线程,耗时任务需交给 TThread 或任务队列。技术价值在于让计时

weixin_26886855的博客 316

Delphi 开发 Windows Service 技巧

(试用环境 Delphi 6 + Windows 2000)这几天用 Delphi 作一个 Windows 的 Service 模块,遇到不少问题。大体整理了一下,与大家分享。1.创建一个 Windows Service 项目(以前写过服务程序的可以跳过了)  运行 Delphi 菜单 File -> New -> Other -> Service Application 得到一个新项目,保存。 

liumyong的专栏 1935

delphi编写windows服务程序

从台湾论坛网上下载的一个代码。调试通过,

Delphi 获取Windows服务状态、启动和停止服务

以下为Delphi获取Windows服务、启动和停止服务的代码,使用方法如下: if SERVICE_RUNNING = ServiceGetStatus('', '服务名') then StopServices('服务名', true); StartServices('服务名', false); ---------------------------------------------...

longchanghua_enshi的专栏 2480

用Delphi创建windows服务程序

有现成代码在用

智能枕头

睡觉和吃饭是一样重要的,一个人想要健康的体魄,不仅要饮食得当,更需要有一个好的睡眠质量。随着人们生活品质的提高,人们对于睡眠的要求越来越高,那么就非常需要一款舒适的枕头。为了适应市场的需求,我爱物联网推出了智能枕头。因为智能枕头可以给头部及颈椎一个良好的承托力,舒适、柔软、放松,让人更好的进入睡眠。 目录 一、智能枕头方案介绍 二、智能枕头的优点 三、智能枕头功能介绍 四、智能枕头APP开发 五、...

6108我爱物联网方案开发优快云博客 3659

delphi Tservice类

TService属性介绍: AllowPause:是否允许暂停; AllowStop:是否允许停止; Dependencies:启动服务时所依赖的服务,如果依赖服务不存在则不能启动服务,而且启动本服务的时候会自动启动依赖服务; DisplayName:服务显示名称; ErrorSeverity:错误严重程度; Interactive:是否允许和桌面交互; LoadGroup:加载

YZW20140807的专栏 1060

OFDM基本原理

OFDM基础介绍,包括OFDM的核心思想,数学推导了OFDM信号的调制解调过程。

伊丽莎白的学习之路 8908

delphi服务程序(service)的调试方法

delphi服务程序(service)的调试

全欣 的专栏 1万+

在Qt中集成VTK和PCL:实现数据可视化的完整指南

在现代软件开发中,数据可视化至关重要。将VTK(Visualization Toolkit)和PCL(Point Cloud Library)集成到Qt环境里,能为开发者提供强大的可视化解决方案。本文将深入讲解如何在Qt中读取PCL文件,展示VTK模型和PCL数据,适合想要在Qt项目中实现数据可视化的开发者。

轩宇的博客 916

全网首发--Unet3+改进16:在不同位置添加RepLKBlock超大卷积核

本文提出了一种基于大核卷积的神经网络架构RepLKNet,旨在缩小CNN与ViTs之间的性能差距。通过重新审视CNN中的大核设计,研究证明使用少量大卷积核替代多个小核能获得更强大的性能。提出的RepLKNet采用31×31大卷积核,在ImageNet和下游任务上取得了与SwinTransformer相当或更好的结果,同时具有更低延迟。文章详细介绍了实现步骤:(1)创建RepLKBlock模块文件;(2)在模型层中添加注意力机制;(3)在UNet模型中集成RepLKBlock;(4)完成训练流程。该方法展现了

AIcurator的博客 618

Delphi Web Service 的创建及调试运行

一、Web Service程序创建 1.        新建Web Service工程,选择SOAP ServerApplication. 2.        选择Web AppDebugger executable,Class Name中添入类名“Demo1”. 3.        单击“Yes” 按钮. 4.        Service name中添入“Mai

fjclc2008的专栏 1890

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

本实验基于Kaggle上提供的从2013年到2023年的黄金价格数据集,运用长短期记忆网络(LSTM)构建了黄金价格预测模型。该数据集详细记录了每日的黄金价格信息,包括开盘价、收盘价、高点、低点和交易量等,为模型的训练提供了丰富的数据支持。

m0_64336780的博客 1万+

Delphi创建服务程序

Windows 2000/XP和2003等支持一种叫做”服务程序”的东西.程序作为服务启动有以下几个好处: 不用登陆进系统即可运行. 具有SYSTEM特权.所以你在进程管理器里面是无法结束它的. 如何创建Service下面就介绍一下如何用Delphi7创建一个Service程序: 运行Delphi7,选择菜单File–>New–>Other—>Service Application.将生成一个服务

wsgqp的专栏 7901

【DRAM存储器五十一】LPDDR5介绍--DFE与Pre-Emphasis

简述LPDDR5的DFE和预加重应用设置

highman110的博客 705

OpenCV-Python实战(10)——详解 OpenCV 轮廓检测

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,将首次通过简单示例了解轮廓的基本概念,然后通过实际示例来了解如何检测和压缩轮廓,最后利用介绍如何利用图像矩描述检测到的轮廓属性。

盼小辉丶的博客 3万+

DELPHI调试WINDOWS服务的一点心得(转)

DELPHI调试WINDOWS服务的一点心得(转) Delphi可以很轻松地开发windows服务,可是调试的时候,确有问题。服务能跑起来,可以把把调试器附加到服务的进程上。如果服务起不来呢?该如何调试呢? 如果直接按F9,则服务只是被创建,还没有起动,就会自已退出去了。 我想到的办法就是让服务以普通程序的方式来运行。 为了使用同一份代码,所以我彩用条件编译的方式来实现,在工程的DPR文件...

weixin_30904593的博客 179

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 读主板 BIOS 的 UUID
下一篇: Delphi对字符串算式进行计算
pcplayer
博客等级 码龄26年 633粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值