2013-04-06 310 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