Service 如何使用Inno安装程序安装Windows服务?

Service 如何使用Inno安装程序安装Windows服务?,service,inno-setup,Service,Inno Setup,我编写了一个批处理脚本,在使用Inno Setup进行安装后执行。问题是,我有以下用于创建服务的命令行: sc create MySQL start= auto DisplayName= MySQL binPath= "C:\MyApp\MySQL 5.5\bin\mysqld" --defaults-file="C:\MyApp\MySQL 5.5\my.ini" 带重音的字母是这段代码的问题,如果我在cmd中打开bat文件,我就无法执行它,但是当我键入时,服务是正常创建的。如何修复此问题?

我编写了一个批处理脚本,在使用Inno Setup进行安装后执行。问题是,我有以下用于创建服务的命令行:

sc create MySQL start= auto DisplayName= MySQL binPath= "C:\MyApp\MySQL 5.5\bin\mysqld" --defaults-file="C:\MyApp\MySQL 5.5\my.ini"

带重音的字母是这段代码的问题,如果我在cmd中打开bat文件,我就无法执行它,但是当我键入时,服务是正常创建的。如何修复此问题?

您可以尝试将此命令添加到
[RUN]
部分(如TLama所建议),或在
[code]
部分中创建
安装后的
函数

[Run] 
Filename: "{cmd}"; Parameters: "sc create MySQL start= auto DisplayName= MySQL 
binPath= ""C:\MyApp\MySQL 5.5\bin\mysqld"" 
--defaults-file=""C:\MyApp\MySQL 5.5\my.ini"""; 
Flags: runhidden

与直接调用SC相比,它更干净(并且更容易处理任何错误或服务依赖项)。请注意,本例假设您使用的是ANSI Inno,但为Unicode修改它相当简单

不过,就我个人而言,我更喜欢将install/start/stop/uninstall命令构建到服务可执行文件中,使其能够自我注册。显然,这不可能为第三方服务自行完成,但您可以检查它是否已经支持类似的功能


最后一点是,您不能硬编码C:文件夹的路径。你应该改用
{app}

你可以在安装后使用
执行
函数或
[Run]
文件名:“{cmd}”;参数:“sc create MySQL start=auto DisplayName=MySQL binPath=”“C:\A Nova Soluço Informática\MySQL 5.5\bin\mysqld”“--默认文件=”“C:\A Nova Soluço Informática\MySQL 5.5\my.ini”“;标志:runhidden
尝试在批处理文件的开头添加
CHCP 65001
,并将其保存为不带BOM的UTF-8@Roben,或者只是
[Run]
部分。@Roben,你的解决方案对我有部分帮助,问题是在安装服务后,cmd进程保持打开状态,安装没有完成。有人测试过这段代码吗?我正在尝试使用此代码,但它不起作用。cmd窗口将弹出,但不执行任何操作。@Govs您是否尝试过在
参数
cmd/csc…
)的开头使用
/c
),或者仅使用
文件名:“sc”;参数:“创建…”
文件名:“sc”;参数:“创建服务\u name start=auto DisplayName=display\u name binPath=”“{sys}\service\u name.exe”“”;标志:runascurrentuser runhidden
适用于me@bartolo-otrit两个语法:(你的)
Filename:“{sys}\sc.exe”;参数:“创建…”
文件名:“{cmd}”;参数:“sc create…”
我真的很想知道其中的微妙之处?@Sandburg关于命令行直接调用与间接调用的比较我这次没有任何微妙之处可以分享,但在这种情况下似乎不需要间接调用。您已经有Unicode版本的API了吗?我非常需要它。谢谢大家!@MaikenRoskilde如果您正在使用Unicode Inno设置,那么只需将
外部
条目中
@
符号之前的
A
后缀改为
W
。不需要进行其他更改。Silvio Iaccarino的链接脚本对我不起作用。我正在使用Unicode Inno设置,并尝试按照建议更改后缀,但仍然没有成功。我不断收到一个错误:“servicemanager不可用”或类似错误。请参阅,以获得一个对我有用的替代脚本/库。它更干净,但仅此而已,它就像1TB代码!?!它几乎没有那么大,尤其是在编译时。如果它困扰着你,你可以将它的大部分提取到一个文件中,你可以根据需要包含它。(或者使用bszom链接到的库,该库已经为您完成了此操作。)