Инсталиране на MySQL и зареждане на база данни на Inno Setup скрипт

Прочетох много документи за Stack Overflow, вие сте страхотни! Взех някакъв код, който беше предложен в друга публикация. Помощта беше страхотна! Успях да заредя и стартирам MySQL благодарение на RobeN. Прочетох обаче документацията, която беше предложена за автоматично зареждане на база данни в последователността. Изглежда не мога да го разбера. Всяка помощ би била чудесна!

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Test"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "DispatchSystem.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={{790A9827-137F-4D93-A981-1A5C38FFB8F8}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=C:\gd\FL\Project\xsbucks_vc\inno\
OutputBaseFilename=Logistics Dispatch
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "D:\SWW\CaLogistics\EXE\mysql-5.5.11-win32.msi"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\DispatchSystem.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\background.fw.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\background.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\background234.jpg"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\database.sql"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\ds.ini"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\Ionic.Zip.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\logo.jpg"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\logo.png"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\MySql.Data.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\SWW\CaLogistics\EXE\MySqlBackup.dll"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: msiexec; Parameters: "/i mysql-5.5.11-win32.msi /qn INSTALLDIR=""C:\mysql"""; WorkingDir:{app}; StatusMsg: Please wait while we install Mysql 5.5.11;  Flags: runhidden

Filename: C:\mysql\bin\mysqld.exe; Parameters:" --install"; WorkingDir: {app}; StatusMsg: Installing MySQL services; Description: Installing MySQL Service; Flags: runhidden

Filename: net.exe; Parameters: start mysql; StatusMsg: Starting MySQL server; Description: Starting MySQL Server; Flags: runhidden

Filename: C:\mysql\bin\mysql.exe; Parameters: "-e ""update mysql.user set password=PASSWORD('admin') where user='root';"" -u root"; WorkingDir: {app}; StatusMsg: Configuring MYSQL ; Flags: runhidden

Filename: C:\mysql\bin\mysql.exe; Parameters: "-e ""flush privileges;"" -u root -padmin"; WorkingDir: {app}; StatusMsg: Configuring Database Servers; Flags: runhidden

Filename: C:\mysql\bin\mysql.exe; Parameters: "-u root -padmin -h localhost --execute=""SOURCE database.sql"""; WorkingDir: {app}; StatusMsg: Loading Database; 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.11-win32.msi');
     Exec('msiexec.exe', '/i mysql-5.5.11-win32.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;

person Ron Kerr    schedule 10.10.2013    source източник
comment
Кога извиквате MYSSQL_IS()? След разопаковане (msiexec) или инсталиране на услуга (-- инсталиране)?   -  person user725455    schedule 16.10.2014
comment
твърдото кодиране на пътища е опасно C:\mysql\bin\mysqld.exe какво ще кажете за инсталирането в поддиректория, където е инсталирано приложението ви, като използвате {app}\mysql\bin\mysql.exe   -  person Smith    schedule 31.08.2016


Отговори (2)


Успях да намеря решение на този проблем. Вместо да заредя базата данни директно от INNO скрипта, написах sql командите в групов файл и изпълних .bat от скрипта.

Въведете това в документ с бележник и го запазете като loadDB.bat. Първият ред задава пътя на вашата директория до мястото, където е инсталиран вашият mysql.exe. Следващият ред създава празна база данни. (Не знам защо, но не мога да накарам mysql да зареди файла с базата данни, без първо да създам празна база данни на сървъра) Последният ред е командата mysql за зареждане на базата данни от вашата база данни ,sql файл.

cd /d C:\Program Files\MySQL\MySQL Server 5.1\bin

mysql -uroot -padmin -e "създаване на база данни mydatabase;"

mysql -uroot -padmin mydatabase ‹ "C:\database.sql"

Сега във вашия INNO скрипт под секцията [FILES] добавете .bat файла

Източник: "path-to-file\loadDB.bat"; DestDir: "{приложение}"; Флагове: игнориране

И под секцията [RUN] изпълнете .bat. Обърнете внимание, че този ред трябва да е последният ред в секцията [RUN], тъй като трябва да се изпълни само след инсталиране на Mysql сървъра.

Име на файл: "{app}\loadDB.bat"

Сега компилирайте и стартирайте настройката.

Като странична бележка: не съм го пробвал, но може би ако добавите командите mysql в .bat директно в inno скрипта с правилните параметри, можете да заредите базата данни без нуждата от пакетния файл.

Надявам се това да реши проблема ви.

person quicksilver    schedule 15.11.2013
comment
Можете да ги стартирате директно от вашата настройка без проблем, но това наистина трябва да се направи като част от вашето приложение, за да се справите с бъдещи надстройки или ако сървърната база данни бъде изтрита. - person Deanna; 19.11.2013
comment
това се превръща в проблем, ако инсталирате в 64-битова система, тъй като моята е инсталирана в C:\Program Files (x86)\MySQL\MySQL Server 5.5 - person Smith; 31.08.2016
comment
Е, това се превръща в проблем, дори ако вашето MySQL инсталационно устройство не е C: (малко SSD), а D: (огромен HDD), както в моя случай... - person tedebus; 23.10.2017

След като сте инсталирали MySQL и сте го стартирали, е лесно да заредите MySQL Script файл.

Ключовата точка е предаването на командата source към mysql.exe -e параметър, така че да може да зареди скриптовия файл. Подаването на име на скрипт със сигнал ‹ не работи за мен.

[Files]
Source: "script.sql"; DestDir: "{tmp}"; Flags: deleteafterinstall;

[Run]
Filename: "{reg:HKLM\SOFTWARE\MySQL AB\MySQL Server 5.6,Location}\bin\mysql.exe"; \
 Parameters: "-u root -prootpassword -e ""source {tmp}\script.sql"""; \
 StatusMsg: "Loading MySQL Database Initial Data"; \
 Flags: runhidden waituntilterminated;
person Fernando Vieira    schedule 18.02.2015