一直以来,Delphi的VCL中的TService都没有Description属性,这一点总是让人感到奇怪。即使到了今天,Delphi XE2仍然没有这个属性。它是一个如此简单和常见的东西,我不明白为什么没有提供。
我知道如何自己创建它,但我的观点是我不应该这样做。我想知道是否有任何技术原因导致Delphi's VCL没有内置服务的Description属性?因为它看起来对他们来说非常简单。
一直以来,Delphi的VCL中的TService都没有Description属性,这一点总是让人感到奇怪。即使到了今天,Delphi XE2仍然没有这个属性。它是一个如此简单和常见的东西,我不明白为什么没有提供。
我知道如何自己创建它,但我的观点是我不应该这样做。我想知道是否有任何技术原因导致Delphi's VCL没有内置服务的Description属性?因为它看起来对他们来说非常简单。
设置它需要使用ChangeServiceConfig2 API函数,在XP和Win2003中引入,Delphi服务类在此之前编写,并且在很长一段时间内,Windows NT4和2000是Delphi RTL的基线。
此外,由于某种未知原因,Borland(及其继承者)不喜欢在Windows API函数上使用动态绑定,而更喜欢静态绑定到DLL或晚期但非可选绑定(别问我为什么,这对我毫无意义),使用先前的函数将要求将Win2003作为最低版本或使用动态绑定。
因此,我认为这不是一个故意的决定,而更多地是公司在动态绑定方面的政策以及简单老旧代码的维护忽视/疏忽导致的结果。
TService
。 - Jerry Dodgeprocedure 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;