Inno Setup 执行 SQL 脚本的方法
作为和 NSIS 并立的、两个最流行的免费 Windows 应用程序安装包制作工具之一,Inno 在
学习难度上相对要低一些,非常适合对一些简单的桌面程序打包。但对于较复杂的安装过程,
或者 Web 应用程序来说,我个人觉得不是 Inno 的强项。当然,既然 Inno 内嵌了 Pascal 语
言用以扩展功能,理论上不是不可以应付复杂的安装过程,但实现起来要复杂一些。
比如对于在安装过程中连接数据库并执行 SQL 脚本这样的需求,使用 InstallShield 应该会
简单地多,而 Inno 却不支持直接操作数据库,并且相关的资料说明少之又少,还不如 NSIS
丰富,以至于我踏破铁鞋无觅处,最终却在 NSIS 的资料中找到了思路。
主要的思路是,在安装过程中,调用数据库客户端连接数据库并执行 SQL 脚本,然后将执
行结果或错误信息输出到文件中,最后通过分析这个文件来判断命令执行的结果。但是,既
然是调用特定的客户端,那么对不同数据库的操作自然就有所区别,具体情况如下所述。
首先在打包脚本的[Files]段将必需的文件包含进来:
[Files]
Source: "D:/Development/MyDemoApp/code/*"; DestDir: "{app}"; Flags: ignoreversion
recursesubdirs createallsubdirs
;osql.exe 在 SQL Server2000 安装目录中
Source: "D:/Development/MyDemoApp/osql.exe"; Flags: dontcopy
Source: "D:/Development/MyDemoApp/MySQL.exe"; Flags: dontcopy
Source: "D:/Development/MyDemoApp/script_mssql.sql"; Flags: dontcopy
Source: "D:/Development/MyDemoApp/script_mysql.sql"; Flags: dontcopy
Source: "D:/Development/MyDemoApp/script_oracle.sql"; Flags: dontcopy
在 SQL Server 中执行脚本的代码片断:
function ExecScriptInMSSQL(DBHost, DBLogin, DBPass, DBName: String): Boolean;
var
ConnectExe: String;
ConnectParam: String;
begin
{解压临时文件}