nsis - 在 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 无关,您只是没有使用正确的 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