我想在Inno Setup
安装后安装MySQL服务。已有类似的问题here,但没有解决方案对我有用。
如果我在解决方案中使用sc create
,那么安装后命令promt会弹出,但不会执行任何操作。
我尝试根据某个页面修改命令,它在cmd中运行良好:
sc create "MySQLSW" binpath= "\"C:\Program Files (x86)\Drevarska spolecnost\MySQL Server 5.6\bin\mysqld\" --defaults-file=\"C:\Program Files (x86)\Drevarska spolecnost\my.ini\" MySQLSW" DisplayName= "MySQLSW" start= "auto"
对于Inno Setup,它需要双引号,所以我尝试了这个以及它的几个变种
[Run]
Filename: "{cmd}"; Parameters: "sc create ""MySQLSW"" binpath= ""\""{app}\MySQL Server 5.6\bin\mysqld\"" --defaults-file=\""{app}\my.ini\"" MySQLSW"" DisplayName= ""MySQLSW"" start= ""auto""";
但是cmd不会执行任何操作。问题可能在于反斜杠,但我不知道正确的语法。
我还尝试从here添加API并使用以下代码,但也一定有问题,因为它只是通过安装,但不会创建服务。
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if IsServiceInstalled('MySQLSW') = false then begin
if InstallService(ExpandConstant('{app}\MySQL Server 5.6\bin\mysqld.exe'),ExpandConstant('--defaults-file="{app}\my.ini"'),'MySQLSW','Needed for mysql database',SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START) = true then begin
StartService('MySQLSW');
end
end
else if IsServiceRunning('MySQLSW') then
MsgBox('MySQLSW is running',mbInformation, MB_OK);
end;
end;
我对此并不熟悉,但我敢肯定,某处会有一些错位的报价,但我找不到它。在此先感谢您的帮助。
答案 0 :(得分:1)
我至少发现了一个奇怪的观点。
https://github.com/pgina/pgina/blob/master/Installer/scripts/services.iss的安装服务定义:
function InstallService(FileName, ServiceName, DisplayName, Description : string;ServiceType,StartType :cardinal) : boolean;
您的电话
InstallService(ExpandConstant('{app}\MySQL Server 5.6\bin\mysqld.exe'),ExpandConstant('--defaults-file="{app}\my.ini"'),'MySQLSW','Needed for mysql database',SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START)
您确定ServiceName可能包含此类内容吗?
FileName - ExpandConstant('{app} \ MySQL Server 5.6 \ bin \ mysqld.exe')
ServiceName - ExpandConstant(' - defaults-file =“{app} \ my.ini”')
DisplayName - 'MySQLSW'
描述 - '需要mysql数据库'
ServiceType - SERVICE_WIN32_OWN_PROCESS
StartType - SERVICE_AUTO_START
试试这个
InstallService(ExpandConstant('"{app}\MySQL Server 5.6\bin\mysqld.exe"') + ExpandConstant(' --defaults-file="{app}\my.ini" MySQLSW'), 'MySQLSW' ,'MySQLSW','Needed for mysql database',SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START)