Inno Setup在[Files]部分之前执行批处理文件

时间:2011-07-25 14:55:05

标签: inno-setup setup-deployment

目前我的批处理文件位于[运行]部分。我需要在[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

3 个答案:

答案 0 :(得分:12)

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

如果需要先从设置中提取文件,那么您可以在其前面加ExtractTemporaryFile()

答案 1 :(得分:5)

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

请参阅; How to run a file before setup with Inno Setup

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

答案 2 :(得分:5)

继续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';