在 Delphi 的 VCL 中从来没有Description
属性总是很奇怪。TService
直到今天,Delphi XE2 还没有它。这是一件如此简单和常见的事情,我想知道为什么它不存在。
我知道如何自己创建它,但我的观点是我不应该这样做。我想知道是否有任何技术原因导致Description
服务没有内置到 Delphi 的 VCL 中?因为对他们来说实施起来似乎很简单。
在 Delphi 的 VCL 中从来没有Description
属性总是很奇怪。TService
直到今天,Delphi XE2 还没有它。这是一件如此简单和常见的事情,我想知道为什么它不存在。
我知道如何自己创建它,但我的观点是我不应该这样做。我想知道是否有任何技术原因导致Description
服务没有内置到 Delphi 的 VCL 中?因为对他们来说实施起来似乎很简单。
设置需要用到 XP & Win2003 引入的 ChangeServiceConfig2 API 函数,Delphi 中的服务类是在此之前编写的,长期以来,Windows NT4 和 2000 都是 Delphi RTL 的基线。
同样由于一些未知的原因,Borland(和后继者)一直反对在 Windows API 函数上使用动态绑定,更喜欢静态绑定到 DLL 或后期但非可选的绑定(不要问我为什么,这对我来说毫无意义),并且使用以前的函数将需要将 Win2003 作为最低版本或使用动态绑定。
所以我不认为这是一个深思熟虑的决定,而更多的是公司关于动态绑定的政策和简单的旧代码维护忽视/疏忽的结果。
你可以这样使用。
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;