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

如何使用NSIS和NSSM配置程序开机以管理员身份自动运行

解决方案

通过NSIS自定义交互页收集管理员凭据,再调用NSSM命令行参数直接配置服务登录身份即可实现全自动化,无需用户手动操作服务面板。

1. NSIS脚本新增凭据收集页面

使用NSIS自带的nsDialogs插件自定义安装页面,接收用户输入的管理员账号和密码,密码输入框默认隐藏明文:

!include nsDialogs.nsh
!include LogicLib.nsh

; 定义存储凭据的变量
Var AdminUsername
Var AdminPassword

; 插入自定义页面到安装流程中,可放在安装步骤之前或服务注册步骤之前
Page custom nsDialogs_CreateCredPage nsDialogs_LeaveCredPage

Function nsDialogs_CreateCredPage
  nsDialogs::Create 1018
  Pop $0

  ${If} $0 == error
    Abort
  ${EndIf}

  ; 用户名输入项
  ${NSD_CreateLabel} 0 0 100% 12u "请输入具有管理员权限的账号(本地账号格式为.\用户名,域账号为域名\用户名):"
  Pop $0
  ${NSD_CreateText} 0 13u 100% 12u "$UserName" ; 默认填入当前用户,可修改
  Pop $AdminUsername

  ; 密码输入项
  ${NSD_CreateLabel} 0 30u 100% 12u "请输入对应账号的密码:"
  Pop $0
  ${NSD_CreatePassword} 0 43u 100% 12u ""
  Pop $AdminPassword

  nsDialogs::Show
FunctionEnd

Function nsDialogs_LeaveCredPage
  ; 读取用户输入的内容
  ${NSD_GetText} $AdminUsername $AdminUsername
  ${NSD_GetText} $AdminPassword $AdminPassword

  ; 非空校验,可根据需求添加账号格式校验
  ${If} $AdminUsername == ""
    MessageBox MB_OK "管理员账号不能为空"
    Abort
  ${EndIf}
  ${If} $AdminPassword == ""
    MessageBox MB_OK "账号密码不能为空"
    Abort
  ${EndIf}
FunctionEnd

记得在NSIS脚本头部添加RequestExecutionLevel admin,确保安装包本身有足够权限修改服务配置。

2. 调用NSSM配置服务登录身份

在你原有调用NSSM注册服务的逻辑后,追加以下命令配置服务的登录身份,将<你的服务名>替换为实际的服务名称:

; 配置服务以用户输入的管理员身份运行
ExecWait '"$INSTDIR\nssm.exe" set <你的服务名> ObjectName "$AdminUsername" "$AdminPassword"' $0

; 可选:校验配置是否成功,返回值为0代表配置成功
${If} $0 <> 0
  MessageBox MB_OK "管理员凭据配置失败,请检查账号密码是否正确"
  Abort
${EndIf}

; 后续可以正常启动服务
ExecWait '"$INSTDIR\nssm.exe" start <你的服务名>'

注意事项

  • 若使用本地内置管理员账号,用户名为.\Administrator的情况下,需确保该账号已启用且未被禁用
  • 域环境下账号格式需填写完整的域名\用户名,否则会识别为本地账号导致配置失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:00