我希望创建批处理文件并在安装完成后运行它。我在这里找到了一个教程: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;
它没有任何错误编译并安装我的包没有任何错误,但它不会创建具有该行的批处理文件。我需要添加一些东西吗?我刚刚添加了教程中显示的代码部分并对其进行了一些编辑(即我只需要一行,而不是行)。
如果您需要任何进一步的信息,请告诉我。我会尽快回复。
答案 0 :(得分:1)
original code中的CurStepChanged
是Inno Setup event function。你不能重命名它。
确保{sd}\{#MyAppName}\Temp
存在。为什么不使用安装程序临时文件夹({tmp}
)?
您必须使用ExpandConstant
function扩展{sd}
中的{sd}\{#MyAppName}\Temp\installdatabase.sql
常量(与批处理文件的路径一样)。你最好将路径包装成双引号。
对于单个命令,您无需创建批处理文件。只需使用ShellExec
function:
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;