Когда нужна тихая установка? Например, при установке своей программы, которая опирается на базу данных, например, на mysql.
Разберем пример тихой установки 64 битного сервера MySQL в директорию C:\mysql. Импорт базы данных разберем в следующем посте. Работать в основном будем с Pascal Script, работа с InnoSetup, генерирующим Pascal Script достаточно проста, на мой взгляд.
Итак, нам понадобятся
–установочный файл сервера MySQL, версия 5.5
За основу я взял код с сайта stackoverflow. Также мне помог сайт официальный сайт MySQL. И ещё одно сообщение на одном форуме.
Код установки на Pascal Script в InnoSetup выглядит так
1 |
Filename: msiexec; Parameters: "/i mysql-5.5.23-winx64.msi /qn INSTALLDIR=""C:\mysql"" DATADIR=""C:\mysql\data"" "; WorkingDir:{app}; StatusMsg: Please wait while we install mysql-5.5.23-winx64.msi; Flags: runhidden |
Здесь важно прописать DataDir, чтобы потом не было проблем с конфигурированием, на следующем шаге.
Конфигурирование сервера выглядит так…
1 2 |
; Here we configuring our mysql server Filename: C:\mysql\bin\MySQLInstanceConfig.exe; Parameters:"-i -q ""-lC:\mysql\mysql_install_log.txt"" ""-nMySQL Server 5.5"" ""-pC:\mysql"" -v5.5.23 ""-tC:\mysql\my-template.ini"" ""-cC:\mysql\my2.ini"" ServerType=SERVER DatabaseType=MIXED Port=3306 StrictMode=yes ConnectionCount=15 Charset=utf8 ServiceName=MYSQL AddBinToPath=yes RootPassword=masterkey"; WorkingDir: {app}; StatusMsg: Configuring MySQL services; Description: Configuring MySQL Service; Flags: runhidden |
В изначальном коде со stackoverflow много лишнего и не рабочего. В частности способ смены пароля у меня не сработал, и я пошёл традиционным путем, через mysqladmin, в чистом виде,, как например, описано здесь. Пароль можно поменять таким образом, прописать, например в консоли
1 |
mysqladmin -u root password "new_pass" |
Но можно это завернуть в Pascal скрипт программы InnoSetup, и встроить это в общий код установки сервера MySQL
1 2 |
; Here we setting new password for root user Filename: C:\mysql\bin\mysqladmin.exe; Parameters: "-u root password ""masterkey"" "; WorkingDir: {app}; StatusMsg: Setting new password; Flags: runhidden |
Ниже приведен пример для установки 64 битной версии MySQL сервера.
Скрипт, получившийся у меня в InnoSetup выглядит следующим образом
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "MySQL_Install" #define MyAppVersion "1.5" #define MyAppPublisher "My Company, Inc." #define MyAppURL "http://www.example.com/" #define MyAppExeName "MySQL_TestInstall.exe" [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{73F53ED9-3A82-4F4D-8E0C-19BDDE5AD3E6} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\{#MyAppName} DisableProgramGroupPage=yes OutputDir=C:\Users\NoName\Desktop\ComplierOutput OutputBaseFilename=MySQL_TestSetup Compression=lzma SolidCompression=yes [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 [Files] ;Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MySQL_TestInstall.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Users\NoName\Desktop\MySQL_InstallTest_SourceFiles\InnoSetup_Test.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Users\NoName\Desktop\MySQL_InstallTest_SourceFiles\mysql-5.5.23-winx64.msi"; DestDir: "{app}"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon [Run] Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent Filename: msiexec; Parameters: "/i mysql-5.5.23-winx64.msi /qn INSTALLDIR=""C:\mysql"" DATADIR=""C:\mysql\data"" "; WorkingDir:{app}; StatusMsg: Please wait while we install mysql-5.5.23-winx64.msi; Flags: runhidden Filename: C:\mysql\bin\mysqld.exe; Parameters:" --install"; WorkingDir: {app}; StatusMsg: Installing MySQL services; Description: Installing MySQL Service; Flags: runhidden ; Here we configuring our mysql server Filename: C:\mysql\bin\MySQLInstanceConfig.exe; Parameters:"-i -q ""-lC:\mysql\mysql_install_log.txt"" ""-nMySQL Server 5.5"" ""-pC:\mysql"" -v5.5.23 ""-tC:\mysql\my-template.ini"" ""-cC:\mysql\my2.ini"" ServerType=SERVER DatabaseType=MIXED Port=3306 StrictMode=yes ConnectionCount=15 Charset=utf8 ServiceName=MYSQL AddBinToPath=yes RootPassword=masterkey"; WorkingDir: {app}; StatusMsg: Configuring MySQL services; Description: Configuring MySQL Service; Flags: runhidden ; Here we starting mysql service Filename: net.exe; Parameters: start mysql; StatusMsg: Starting MySQL server; Description: Starting MySQL Server; Flags: runhidden ; Here we setting new password for root user Filename: C:\mysql\bin\mysqladmin.exe; Parameters: "-u root password ""masterkey"" "; WorkingDir: {app}; StatusMsg: Setting new password; Flags: runhidden Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [Code] function MySQL_Is(): Boolean; var iResultCode: Integer; begin Result := true; if (not RegKeyExists(HKLM, 'SOFTWARE\MySQL AB\MySQL Server 5.5')) or (not FileExists(ExpandConstant('{reg:HKLM\SOFTWARE\MySQL AB\MySQL Server 5.5,Location}\bin\mysql.exe'))) then begin ExtractTemporaryFile('mysql-5.5.23-winx64.msi'); Exec('msiexec.exe', '/i mysql-5.5.23-winx64.msi /qn INSTALLDIR="C:\mysql"', ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, iResultCode); if not FileExists(ExpandConstant('{reg:HKLM\SOFTWARE\MySQL AB\MySQL Server 5.5,Location}\bin\mysql.exe')) then begin MsgBox('Something went wrong! Installation should be terminated', mbInformation, MB_OK); Result := false; end; end; end; |
Какие вопросы остались за кадром?
Установка базы данных – разберем в следующем посте.
Выбор директории установки MySQL сервера – также разберем в следующем посте.
Как удалить сервер MySQL после деинсталляции основной программы?