9

在 Delphi 的 VCL 中从来没有Description属性总是很奇怪。TService直到今天,Delphi XE2 还没有它。这是一件如此简单和常见的事情,我想知道为什么它不存在。

我知道如何自己创建它,但我的观点是我不应该这样做。我想知道是否有任何技术原因导致Description服务没有内置到 Delphi 的 VCL 中?因为对他们来说实施起来似乎很简单。

4

2 回答 2

10

设置需要用到 XP & Win2003 引入的 ChangeServiceConfig2 API 函数,Delphi 中的服务类是在此之前编写的,长期以来,Windows NT4 和 2000 都是 Delphi RTL 的基线。

同样由于一些未知的原因,Borland(和后继者)一直反对在 Windows API 函数上使用动态绑定,更喜欢静态绑定到 DLL 或后期但非可选的绑定(不要问我为什么,这对我来说毫无意义),并且使用以前的函数将需要将 Win2003 作为最低版本或使用动态绑定。

所以我不认为这是一个深思熟虑的决定,而更多的是公司关于动态绑定的政策和简单的旧代码维护忽视/疏忽的结果。

于 2013-03-19T04:07:13.507 回答
2

你可以这样使用。

procedure TMyService.ServiceAfterInstall(Sender: TService);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create(KEY_READ or KEY_WRITE);

  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
    begin
      Reg.WriteString('Description', 'All details you can write to here.');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;
于 2021-03-27T23:21:55.603 回答