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