2016-09-03 48 views
-1

我正在使用下面的脚本来安装与我的应用程序的mysql,但它总是无法创建数据库并加载数据库脚本。调试器返回一个错误代码1,我没有找到任何其他信息关于任何地方失败的原因创建mysql数据库inno setup返回错误代码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"); 
+0

请停止发布这些不好的问题,寻找一种方式。这是连续第三次。无论哪种情况,您都不愿意单独测试运行命令并检查结果。前面的问题实际上与Inno Setup没有任何关系。这两次都是命令或其输入是糟糕的。如果您单独运行该命令,则会看到错误消息或其他问题迹象。 –

+0

它会更容易指出它是一个命令错误,并指出。如果我有答案,你认为我会问吗? – Smith

+0

只有在命令行上实际测试命令后,才应该询问。正如你的回答清楚地表明的那样,你没有做什么。我希望你现在终于意识到了,而且你不会再要求另一个问题,例如*“我的命令在Inno Setup中不起作用,我不知道为什么”*,当实际问题是*时“我的命令不起作用所有的,我甚至都没有打扰过像命令那样测试它,在那里我会看到实际的错误消息,这将帮助我调试它“*。 –

回答

0

调试完毕,并在网上搜索了几个小时之后,我发现从文件中的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;