德尔福的Windows服务的命令行参数

我有一个Deplhi基于Windows服务,在安装时,解析了一些命令行参数。 我想这些参数被添加到服务命令行(在注册表的ImagePath值),以使服务总是开始与他们。

我怎样才能做到这一点?

我想在注册表编辑器看起来就像这样:
在注册表项HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \服务\为MyService

  • ImagePath = C:\Path\to\my\service.exe -some -arguments

谢谢

更新:安装与完成>MyService.exe /install -some -arguments 这些参数是那些我要坚持的命令行。

更新:我发现了一个解决方案,通过直接写入到注册表中(见这里),但我还是喜欢一个更优雅的解决方案,比如使用一些TService财产或诸如此类的东西。 谢谢!

--------------解决方案-------------

好了,经过一番研究,我放弃了一个优雅的方式,并采取直接写入到注册表的直线前进的道路。

为了让事情简单,我这样做:我店我想通过在我TService变量的参数。 然后,我设置了AfterInstall事件直接写入到注册表(使用TRegistry对象),我想确切的命令行。

uses Registry;
procedure MyService.AfterInstall(Sender: TObject) ;
var
reg:TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := 'HKEY_LOCAL_MACHINE';
if reg.OpenKey('SYSTEM\CurrentControlSet\Services\MyService', True) then
begin
reg.WriteExtendString ('ImagePath', ParamStr(0) + ' -some -arguments') ;
reg.CloseKey;
end;
finally
reg.Free;
end;
end;

不是优雅的解决方案,我一直在寻找,但它的工作。

感谢您通过其他的答案!

服务的参数可以通过在lpBinaryPathName参数传送到createService功能。 在德尔福的TService,这就是所谓的内部TServiceApplication.RegisterServices.InstallService,它不能覆盖(容易)。

因此,我怀疑这样做最简单的方法将是处理TService.AfterInstall事件,并更新注册表通过自己ChangeServiceConfig。

我刚刚发现了一些令人感到有点惊讶,可能是worthful分享。

您可以在(至少)以下方式指定Windows服务的参数:

  1. 在服务管理器GUI的“Startparameter”输入。
  2. 把它作为参数:SC.EXE YourService参数1参数2
  3. 在注册表项的ImagePath = .. \ YourService.exe参数1参数2输入

在德尔福有2种方式查询应用程序/服务参数:

  • System.ParamCount / System.ParamStr:这样你获得3以上的参数。
  • TService.ParamCount / TService.Param []:这样你得到的1和2上面的参数。

您应该使用SCM API来正确安装服务和配置。 SC.EXE是一个命令行接口到SCM的API。 你不应该直接操作注册表在这种情况下,它的工作原理,但它也取决于其权限的服务帐户。 反正我不知道为什么你需要命令行参数,如果你把它们嵌入的代码 - 通常是那些参数的服务(由安装,配置,等等)来改变服务行为之外。

我不认为你可以使服务启动它们,但如果您存储在注册表中的参数,你可以修改程序,以对未来开始总是去抓住他们。 (即如果ParamCount = 0,那么从注册表检索PARAMS)

巴勃罗,我有同样的问题,但没有找到任何东西,去编辑注册表以及途径。 此外,我使用自定义操作也创造更多的安装目录和复制文件(在C#)。 您的建议是有益的,我停止寻找一个“优雅”的方式为好。 谢谢

分类:德尔福 时间:2012-08-11 人气:0
本文关键词: 窗口服务,德尔福
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.419 (s). 9 q(s)