【问题标题】:Why is there no Description property yet on the TService?为什么 TService 上还没有 Description 属性?
【发布时间】:2013-03-07 14:04:46
【问题描述】:

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

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

【问题讨论】:

  • 我必须指出我正在寻找技术原因,而不是意见。
  • 我的猜测是技术原因是没有人决定(或认为)它是必要的,并且要获得比您必须询问 Borland/CodeGear/Embarcadero 更多的信息. IOW,我认为这里没有人可以回答这个问题。 :-) 不投票或其他任何事情,只是评论。
  • 为什么要在这里问一个只有Delphi团队的决策者才能回答的问题?恕我直言,当它开始询问 为什么 X 在类/库/语言/等中是(或不是)X 时,您必须三思而后行。 因为您知道只有决策者才能问 为什么
  • 是的,这最终是由 Delphi 开发人员做出的决定,但我想看看是否有人知道为什么做出这个决定。
  • @Remy:我猜他们认为它的优先级不如 FMX 或泛型或任何其他更改,但我不知道为什么会这样案子。你会比我更容易找到答案。 :-)

标签: delphi service delphi-xe2 vcl


【解决方案1】:

你可以这样使用。

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;

【讨论】:

  • “我知道如何自己创建它,但我的意思是我不应该这样做。”
【解决方案2】:

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

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

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

【讨论】:

  • +1 这正是我所期望听到的,并不是没有人想这样做,而是它的工作方式并不自然支持它。
  • ...因此需要完全重写 TService 才能使其成为可能。
  • @JerryDodge 不是真的,你只需要动态地(如果你想保持 Win2003 和 XP 的兼容性)绑定函数并在可用时调用它。不需要重写任何东西,这只是一些额外的代码和额外的属性。
  • 嗯,我的意思是 Embarcadero 不会在不修复所有其他缺失的漏洞的情况下解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 2012-04-09
  • 2012-12-11
  • 2017-06-14
  • 1970-01-01
相关资源
最近更新 更多