我想创建一个批处理文件并在安装完成后运行它。我在这里找到了一个教程:https://web.archive.org/web/20240227180634/https://www.codeproject.com/Questions/477984/createplusandpluswriteplusbatchplusfileplusinplusi
所以我开始在我的
[Code]
部分中输入这堆代码:
function CreateInstallDatabaseBatch(): boolean;
var
fileName: string;
line: string;
begin
Result:= True;
fileName:= ExpandConstant('{sd}\{#MyAppName}\Temp\installdatabase.bat');
line:= 'sqlcmd -S ' + srvName + ' -i {sd}\{#MyAppName}\Temp\installdatabase.sql';
Result:= SaveStringToFile(fileName, line, true);
exit;
end;
procedure installdb(CurStep: TSetupStep);
begin
if CurStep=ssDone then
begin
CreateInstallDatabaseBatch();
end;
end;
它编译时没有任何错误,安装我的包也没有任何错误,但它不会用这一行创建批处理文件。我需要添加一些东西吗?我刚刚添加了教程中显示的代码部分并对其进行了一些编辑(即我只需要一行,而不是几行)。
来自
原始代码的
CurStepChanged
是一个Inno Setup事件函数。您无法重命名它。
确保
{sd}\{#MyAppName}\Temp
存在。为什么不使用安装程序临时文件夹 ({tmp}
) 来代替?
ExpandConstant
函数来扩展{sd}
中的{sd}\{#MyAppName}\Temp\installdatabase.sql
常量(就像批处理文件的路径一样)。您最好也将路径用双引号引起来。
ShellExec
函数直接运行命令:
procedure CurStepChanged(CurStep: TSetupStep);
var
Params: string;
ErrorCode: Integer;
begin
if CurStep = ssDone then
begin
Params :=
'-S ' + srvName + ' ' +
'-i "' + ExpandConstant('{sd}\{#MyAppName}\Temp\installdatabase.sql') + '"';
ShellExec('', 'sqlcmd', Params, '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
end;
end;