首页 > 解决方案 > 在 NSIS 中使用引号中的 binpath 创建服务

问题描述

直到今天,我还在使用 .nsi 文件中的以下代码来创建服务:

nsExec::Exec 'SC CREATE "MyService" binpath= "$APPDATA\My App Folder\service\SService.exe" start="auto"'
nsExec::Exec 'sc description "MyService" "Starts The Service"'

它工作得很好,但截至今天,创建的服务无法以错误启动:error 193 0xc1,或者换句话说,服务路径不正确。我打开注册表编辑器Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService并更改C:\ProgramData\My App Folder\service\SService.exe"C:\ProgramData\My App Folder\service\SService.exe"(添加引号),它又开始工作了。

问题是,我怎样才能""在它周围创建一个 binpath?我试过

 nsExec::Exec 'SC CREATE "MyService" binpath= "$\"$APPDATA\My App Folder\service\SService.exe$\"" 

但从未创建服务。""在 NSIS中创建 binpath 的正确语法是什么?如果您有任何想法,为什么 windows 突然决定它不会接受我的路径"",请也分享这些知识。

标签: nsis

解决方案


这与 NSIS 无关,您只是没有使用正确的 sc.exe 语法。sc.exe 可能使用MSVC 规则进行命令行解析,这意味着您必须使用\".

nsExec::Exec '"$sysdir\sc.exe" CREATE "MyService" binpath= "\"$APPDATA\My App Folder\service\SService.exe\"" start= auto'
Pop $0 ; Exit code

推荐阅读