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

问题描述 投票:0回答:1

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

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

batch-file inno-setup pascalscript
1个回答
1
投票
  1. 来自

    原始代码
    CurStepChanged是一个Inno Setup事件函数。您无法重命名它。

  2. 确保

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

  3. 您必须使用

    ExpandConstant
    函数来扩展
    {sd}
    中的
    {sd}\{#MyAppName}\Temp\installdatabase.sql
    常量(就像批处理文件的路径一样)。您最好也将路径用双引号引起来。

  4. 对于单个命令,不需要创建批处理文件。只需使用

    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;
© www.soinside.com 2019 - 2024. All rights reserved.