Pab*_*ino 6 delphi windows-services
我有一个基于Deplhi的Windows服务,在安装时会解析一些命令行参数.我希望将这些参数添加到服务命令行(注册表中的ImagePath值),以便始终使用它们启动服务.
我怎么能做到这一点?
我希望regedit看起来像这样:
在注册表项HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\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;
Run Code Online (Sandbox Code Playgroud)
不是我想要的优雅解决方案,但它确实起了作用.
感谢您的其他答案!
服务参数可以在 lpBinaryPathName 参数中传递给CreateService函数。在 Delphi 的 TService 中,这是在 TServiceApplication.RegisterServices.InstallService 中调用的,您无法(轻松)覆盖它。
因此,我怀疑最简单的方法是处理 TService.AfterInstall 事件并通过ChangeServiceConfig自己更新注册表。
| 归档时间: |
|
| 查看次数: |
9273 次 |
| 最近记录: |