zelvator
zelvator

Reputation: 25

Install MySQL service in Inno Setup

I would like to install MySQL service after install in Inno Setup. There is already similar question here, but no solution there works for me.

If I use sc create like that in the solution, then after installation command promt just pop up, but doesn't do anything.

I tried modify command according some page, it works great in 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"

For Inno Setup it needs to be double quoted, so I tried this and few variants of it

[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""";

But cmd won't execute anything. Problem could be with that backslash, but I don't know the correct syntax.

I also tried add API from here and use following code, but there must be something wrong too, because it just pass installation, but won't create service.

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;

I'm not much skilled in this yet, but I'm sure, there would be some misplaced quote somewhere, but I can't find it. Thanks in advance for help.

Upvotes: 0

Views: 5722

Answers (1)

Andrey Volk
Andrey Volk

Reputation: 3549

I have found at least one strange point.

InstallService definition by https://github.com/pgina/pgina/blob/master/Installer/scripts/services.iss:

function InstallService(FileName, ServiceName, DisplayName, Description : string;ServiceType,StartType :cardinal) : boolean;

Your call

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)

Are you sure ServiceName may contain such things?

FileName - ExpandConstant('{app}\MySQL Server 5.6\bin\mysqld.exe')
ServiceName - ExpandConstant('--defaults-file="{app}\my.ini"')
DisplayName - 'MySQLSW'
Description - 'Needed for mysql database'
ServiceType - SERVICE_WIN32_OWN_PROCESS
StartType - SERVICE_AUTO_START

Try this

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)

Upvotes: 1

Related Questions