You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过InnoSetup在Windows Server部署仅管理员可用的Delphi服务

实现方案拆解

一、Delphi服务基础配置(支持未登录运行)

  • 将Delphi服务的运行账户设置为Local System:在Delphi的TService组件中,把ServiceStartName和ServicePassword都设为空字符串,服务会默认使用Local System账户启动,该账户无需用户登录即可运行。
  • 设置服务启动类型为自动:确保系统开机时自动启动服务,无需用户手动触发。

二、通过InnoSetup配置服务权限(限制普通用户访问)

Windows服务的访问权限通过安全描述符控制,我们需要仅允许系统账户和管理员组访问服务,普通用户无权限读取或操作。

1. 基础安装配置

首先在InnoSetup的[Setup]段强制要求管理员权限:

[Setup]
PrivilegesRequired=admin

2. 安装服务并设置权限

在[Run]段执行服务安装命令,随后通过sc sdset命令设置安全描述符:

[Run]
; 安装服务(假设你的服务程序支持/install参数)
Filename: "{app}\YourDelphiService.exe"; Parameters: "/install"; Flags: runhidden waituntilterminated;
; 设置服务权限:仅系统账户和管理员组可访问
Filename: "sc.exe"; Parameters: "sdset ""{#MyServiceName}"" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"; Flags: runhidden waituntilterminated;
; 设置服务为自动启动
Filename: "sc.exe"; Parameters: "config ""{#MyServiceName}"" start= auto"; Flags: runhidden waituntilterminated;

安全描述符说明:

  • SY:Local System账户,拥有服务完全控制权限
  • BA:管理员组,拥有服务完全控制权限
  • 移除了普通用户组(IU、SU)的权限,确保普通用户无法查看或操作服务

三、效果验证

  • 普通用户登录后,打开services.msc无法找到目标服务,执行sc query 服务名称会提示权限不足;
  • 管理员用户可正常查看、启动、停止服务;
  • 系统重启后,服务自动运行,无需用户登录触发。

四、注意事项

  • 先在命令行测试sc sdset命令的有效性,避免因安全描述符格式错误导致服务异常;
  • Delphi服务若需访问特定资源,需确保Local System账户拥有对应权限(如文件目录、注册表项);
  • 若服务程序不自带安装参数,可直接用sc create命令在InnoSetup中创建服务:
    Filename: "sc.exe"; Parameters: "create ""{#MyServiceName}"" binPath= ""{app}\YourDelphiService.exe"""; Flags: runhidden waituntilterminated;
    

内容的提问来源于stack exchange,提问作者Giansi87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:45:17