- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Delphi 中使用 Windows 服务应用程序时,我偶然发现了该主题中的问题。
我确实在 IDE 上启动了一个默认的 Delphi Windows 服务项目,按照向导进行操作,最后我有了一个项目和一个
T服务单位。我向这个项目添加了另一个单元,一个包含服务代码逻辑的数据模块(名为 DM)。
DM 有一个运行相对较长工作的 TTimer(设计时)。
情况1:
DM 是在设计时默认创建的。我的 TService 启动/停止中有以下代码
procedure TOmegaCAOraNT.ServiceStart(Sender: TService;
var Started: Boolean);
begin
DM.Timer1.Enabled := True;
Started := true;
end;
procedure TOmegaCAOraNT.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
DM.Agent_Stop;
Stopped := true;
end;
procedure TOmegaCAOraNT.ServiceStart(Sender: TService; var Started: Boolean);
begin
FDataModule := TDM.Create(nil);
Started := true;
end;
procedure TOmegaCAOraNT.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
FreeAndNil(FDataModule);
Stopped := true;
end;
"Windows could not stop the SERVICE> service on the Local Computer. The service did not return an error. his could be an internal Windows error or an internal service error. if the error persists, contact your system Administrator"
最佳答案
TService
在运行时运行是自己的工作线程。
如果您将 DM 配置为自动创建,它(及其 TTimer
)将在运行时在主线程中创建,而不是在服务线程中创建。因此,TTimer
将在主线程中运行,并且只能由主线程激活,不能在 TService.OnStart
中激活事件处理程序(如果您尝试,将引发 EOutOfResources
异常)。
如果您在 TService.OnStart
中手动创建 DM事件处理程序,它(及其 TTimer
)将在服务线程中创建,而不是在主线程中。 TTimer
将在服务线程中运行,并且可以在 TService
中(取消)激活事件。
无论哪种方式,请确保您的 TTimer.OnTimer
事件处理程序使用线程安全代码。
此外,TService.OnStop
事件处理程序必须调用 TService.ReportStatus()
方法周期性地(在 TService.WaitHint
间隔过去之前),同时等待其他线程停止它们正在做的任何事情。这意味着您不应该在 TService.OnStop
中使用线程阻塞代码。事件处理程序。
您没有正确处理此问题,这就是 SCM 出现问题的原因。
关于delphi - 强制 TService OnStop 事件等到某个作业完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702769/
在 Delphi 中创建了一些不同的服务后,我意识到 TService 缺少服务应用程序应具备的一些必要功能,例如日志记录、异常处理和注册表中的“描述”属性。 我想知道我是否可以制作自己的服务 she
在 Delphi 中使用 Windows 服务应用程序时,我偶然发现了该主题中的问题。 我确实在 IDE 上启动了一个默认的 Delphi Windows 服务项目,按照向导进行操作,最后我有了一个项
尝试在类中注入依赖项时遇到问题。当我被困在这里时,我只是在尝试以了解有关简单注射和DI的更多信息。 这是我的主要方法: static void Main(string[] args) { va
一直很奇怪的是,Delphi 的 VCL 中的 TService 上从来没有 Description 属性。直到今天,Delphi XE2 还没有这个功能。这是如此简单和常见的事情,我想知道为什么它不
我是一名优秀的程序员,十分优秀!