Inno Setup:如何创建批处理文件并在安装完成后运行它

时间:2016-12-21 12:02:00

标签: batch-file inno-setup

我希望创建批处理文件并在安装完成后运行它。我在这里找到了一个教程: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;

它没有任何错误编译并安装我的包没有任何错误,但它不会创建具有该行的批处理文件。我需要添加一些东西吗?我刚刚添加了教程中显示的代码部分并对其进行了一些编辑(即我只需要一行,而不是行)。

如果您需要任何进一步的信息,请告诉我。我会尽快回复。

1 个答案:

答案 0 :(得分:1)

  1. original code中的CurStepChangedInno Setup event function。你不能重命名它。

  2. 确保{sd}\{#MyAppName}\Temp存在。为什么不使用安装程序临时文件夹({tmp})?

  3. 您必须使用ExpandConstant function扩展{sd}中的{sd}\{#MyAppName}\Temp\installdatabase.sql常量(与批处理文件的路径一样)。你最好将路径包装成双引号。

  4. 对于单个命令,您无需创建批处理文件。只需使用ShellExec function

  5. 直接运行命令
    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;