创建 mysql 数据库 inno 设置 returns 错误代码 1

create mysql database inno setup returns error code 1

我正在使用下面的脚本为我的应用程序安装 mysql,但它总是无法创建数据库和加载数据库脚本。调试器 returns 错误代码 1,我在任何地方都找不到关于失败原因的任何其他消息

当我检查事件查看器时,它看到服务已成功创建并启动,这是事实,但我不明白为什么没有创建数据库。

[Run]
;------------------install service MySQL --------------------------------
;Filename: "{app}\mysql\bin\mysqld.exe"; Parameters: "--install"; WorkingDir: "{app}\mysql\bin";  StatusMsg: "Installing the MySQL";  Description: "Installing MySQL";  Flags: runhidden; Check: MySQL_Is;
Filename: msiexec; Parameters: "/i ""{app}\mysql-5.5.11-win32.msi"" /qn INSTALLDIR=""{app}\mysql"" DATADIR=""{app}\mysql\data"" "; WorkingDir:{app}; StatusMsg: Please wait while we install;  Flags: runhidden

;---------------------CONFIGURING ----------------------------
Filename: {app}\mysql\bin\MySQLInstanceConfig.exe; Parameters:"-i -q ""-l{app}\mysql\mysql_install_log.txt"" ""-nMySQL Server 5.5"" ""-p{app}\mysql"" -v5.5.23 ""-t{app}\mysql\my-template.ini"" ""-c{app}\mysql\mysql.ini"" ServerType=SERVER DatabaseType=MIXED Port=3311 StrictMode=yes ConnectionCount=15 Charset=utf8 ServiceName=MySQL55 AddBinToPath=yes RootPassword=root4u SkipNetworking=no"; WorkingDir: {app}; StatusMsg: Configuring MySQL services; Description: Configuring MySQL Service; Flags: runhidden  


;--------------------- load Database script

;Filename: "{app}\mysql\bin\mysql.exe"; Parameters: "-u root -proot4u -h localhost -e ""source {app}\items_db.sql"""; WorkingDir: {app}; StatusMsg: Loading Database Initial Data; Flags: runhidden waituntilterminated;

Filename: {app}\{#AppExeName}; Description: {cm:LaunchProgram,{#AppName}}; Flags: nowait postinstall skipifsilent

[UninstallRun]
Filename: {sys}\net.exe; Parameters: "stop ""MySQL55"""; StatusMsg: "Stopping MySQL Service ..."; Flags: runhidden;
Filename: "{app}\mysql\bin\mysqld.exe"; Parameters: "remove ""MySQL55"""; StatusMsg: "Deleting MySQL Service  ..."; Flags: runhidden;
Filename: msiexec; Parameters: "/x ""{app}\mysql-5.5.11-win32.msi"" ";

=========================数据库脚本==============

/* Tables */
DROP TABLE IF EXISTS clothes;

CREATE TABLE clothes (
  id    int AUTO_INCREMENT NOT NULL,
  name  varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci,
  PRIMARY KEY (id)
) ENGINE = MyISAM;

Insert Into clothes (Id,Name) values (1,"Shirt");

经过数小时的调试和网络搜索,我发现了一个奇怪的行为

从文件中的 sql 语句执行时,

mysql 不允许在源路径参数中反冲。

;Filename: "{app}\mysql\bin\mysql.exe"; Parameters: "-u root -proot4u -h localhost -e ""source {app}\items_db.sql"""; WorkingDir: {app}; StatusMsg: Loading Database Initial Data; Flags: runhidden waituntilterminated;

所以我开始寻找解决方法

;Filename: "{app}\mysql\bin\mysql.exe"; Parameters: "-u root -proot4u -h localhost -e ""source {app}\{code:GetScriptData}"""; WorkingDir: {app}; StatusMsg: Loading Database Initial Data; Flags: runhidden waituntilterminated;

并在代码部分

[Code]
function GetScriptData(Value: string): string;
begin
  Result := ExpandConstant('{app}') +'/items_db.sql';
  StringChangeEx(Result, '\', '/', True);
end;