2013-04-06 3 views
0

Я хочу установить службу MySQL после установки в Inno Setup. Существует уже аналогичный вопрос here, но решение для меня не работает.Установите службу MySQL в 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 она должна быть в двойных кавычках, поэтому я попытался это и несколько вариантов него

[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 ничего не выполнит. Проблема может быть с этим обратным слэшем, но я не знаю правильного синтаксиса.

Я также попробовал добавить API от here и использовать следующий код, но также должно быть что-то не так, потому что оно просто проходит установку, но не создает службу.

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]' не работал, заключается в том, что вы забыли параметр '/ c' для' {cmd} '. Но использование '{cmd}' было совершенно не нужно - вы могли бы просто вызвать sc напрямую. Однако окончательное решение об использовании API сервиса напрямую в любом случае. – Miral

ответ

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) 

Вы уверены, что ServiceName может содержать такие вещи?

FileName - ExpandConstant ('{приложение} \ MySQL Server 5.6 \ Bin \ mysqld.exe')
ServiceName - ExpandConstant ('- по умолчанию-файл = "{приложение} \ my.ini"')
отображаемое_имя - '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) 
+0

Очень хорошо, когда ответ объясняет, что является источником проблемы, но вы можете рассмотреть пример того, как должен выглядеть правильный способ сделать это. – jachguate

+0

Спасибо, @jachguate. Ред. –

+0

+1 IMHO после редактирования ответа завершен;) – jachguate

Смежные вопросы