Delphi Windows服务名称与项目名称冲突

时间:2018-08-08 13:07:28

标签: delphi windows-services

我有一个名为DataCapture.dpr的基本文件,

program DataCapture;

内部。

然后我必须给服务本身加上另一个名称,以避免名称冲突:

TDataCaptureService = class(TService)

现在,当我注册它时,该服务将在“ DataCaptureService”注册表项下注册,但是我想要:

  1. 要在“ DataCapture”注册表项下注册
  2. 保留DataCapture.exe文件名
  3. 要保留DataCapture.dpr文件名

如何实现?

2 个答案:

答案 0 :(得分:6)

防止命名冲突仅由IDE在设计时实施。为了避免这种情况,您只需在运行时设置服务名称即可,例如在OnCreate事件中:

Name := 'DataCapture';

或者最好是重写DoCreate方法,因为OnCreate用于外部事物:

procedure TDataCaptureService.DoCreate();
begin
  Name := 'DataCapture';
  inherited;
end;

答案 1 :(得分:1)

您无法实现所有三个愿望-您必须牺牲一些东西。在这种情况下,将项目的名称更改为其他名称,然后在生成后将EXE名称更改为所需名称。 Delphi编译器根本不允许相同的标识符使用两次。


也有另一种选择。默认情况下,从Delphi编译的服务具有自己的/install /uninstall参数,您可以调用它们,它们在内部将Name用于服务。但是,您可以忽略它,而使用所需的任何名称通过WinAPI在外部进行安装(从而为您的新名称生成一个对应的注册表项)。