2013-04-06 243 views
0

MySQL服务我想安装MySQL服务Inno Setup后安装。已经有类似的问题here,但没有解决方案在那里为我工作。安装在Inno Setup的

如果我在解决方案中使用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

顺便说一句,你的'[Run]'调用不起作用的原因是你忘记了'{cmd}'的'/ c'参数。但使用'{cmd}'完全没有必要 - 你可以直接调用sc。然而直接使用服务API的最终解决方案无论如何都是更好的。 – Miral 2013-04-08 20:57:47

回答

1

我已经找到至少一个怪点。

InstallService通过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) 

确定服务名称可能包含这样的事情?

文件名 - ExpandConstant( '{应用} \ MySQL服务器5.6 \ BIN \ mysqld.exe')
的ServiceName - ExpandConstant( ' - 默认文件= “{应用} \的my.ini”')
显示名称 - 'MySQLSW'
描述 - '为所需mysql数据库'
服务类型 - 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) 
+0

答案时解释什么是问题的根源,但你可以考虑到包括如何以正确的方式做到这一点应该是一个例子,是很不错的。 – jachguate 2013-04-06 16:20:34

+0

谢谢,@jachguate。编辑。 – 2013-04-06 16:27:38

+0

+1恕我直言编辑后的答案是完整的;) – jachguate 2013-04-06 16:30:59