【问题标题】:Inno Setup Execute a batch file before [Files] sectionInno Setup 在 [Files] 部分之前执行批处理文件
【发布时间】:2011-07-25 14:55:05
【问题描述】:

目前我的批处理文件位于 [Run] 部分。我需要在 [Files] 部分之前执行我的批处理文件。有没有办法在 Inno Setup 中做到这一点?目前 [Run] 部分总是在 [Files] 部分之后执行。

[Run]
Filename: "C:\Users\Scripts\Install\Install.bat"; Parameters: {code:GetDatabaseName}  

[Files]
Source: "C:\Users\MyApp\*"; DestDir: "\\MyServer\MyApp"; Flags: recursesubdirs createallsubdirs

【问题讨论】:

    标签: inno-setup setup-deployment


    【解决方案1】:

    如果需要在设置开始时完成,请在PrepareToInstall()CurStepChanged(ssInstall) 事件函数中使用Exec()。 这些都是在用户说“继续,安装”之后但在其他任何事情之前。 PrepareToInstall() 还允许您取消安装并发出警告。

    如果需要先从设置中提取文件,则可以在前面加上ExtractTemporaryFile()

    【讨论】:

      【解决方案2】:

      继续 Deanna 的精彩回答,代码示例:

      [code]
      function PrepareToInstall(var NeedsRestart: Boolean): String;
      var
         ResultCode: integer;
      begin
         Exec(ExpandConstant('{app}\serviceDeployment\unInstallService.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
      end;
      

      此代码总是返回一个空字符串,告诉设置继续。 如果您想停止设置(在某些错误情况下),您需要返回一个非空字符串,它将显示给用户(并且设置将停止)。

      为了返回错误字符串,在 PrepareToInstall 中添加这一行:

      Result := 'Your Error Description';
      

      【讨论】:

      • 那么,当Exec 失败或执行的目标返回错误时(在这种情况下,批处理脚本返回某个ERRORLEVEL)时,将公平地展示如何处理错误。跨度>
      • Exec 是布尔值。所以你可以检查它是真是假。并且 ResultCode 包含错误代码。如果不是 Exec(.........) 则开始 Result := 'Your Error Description';结束
      【解决方案3】:

      您可以使用 InitializeSetup 事件 + 一些 pascal 脚本。

      看; How to run a file before setup with Inno Setup

      在那个例子中没有提到;要从安装程序中获取文件,您可以使用ExtractTemporaryFile('your.bat') 然后Exec(ExpandConstant('{tmp}\your.bat ... 来运行它。

      【讨论】:

      • 设置后我需要它,因为我需要获取用户输入值。
      猜你喜欢
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      相关资源
      最近更新 更多