MySQL устанавливает и загружает базу данных в сценарии Inno Setup

Я прочитал много документов о переполнении стека, вы молодцы! Я взял некоторый код, который был предложен в другом сообщении. Помощь была отличной! Я смог загрузить и запустить 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) или установки службы (-- install)?   -  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 моя база данных ‹ "C:\database.sql"

Теперь в вашем сценарии INNO под разделом [FILES] добавьте файл .bat.

Источник: "путь к файлу\loadDB.bat"; DestDir: "{приложение}"; Флаги: игнорверсия

И ниже раздела [RUN] выполните .bat. Обратите внимание, что эта строка должна быть последней строкой в ​​разделе [RUN], поскольку она должна выполняться только после установки сервера Mysql.

Имя файла: "{приложение}\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: (огромный жесткий диск), как в моем случае... - person tedebus; 23.10.2017

После того, как вы установили MySQL и запустили его, легко загрузить файл сценария MySQL.

Ключевой момент передает команду 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