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

ode*_*213 10 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
Run Code Online (Sandbox Code Playgroud)

Dea*_*nna 12

如果需要在安装开始到完成,使用Exec()PrepareToInstall()CurStepChanged(ssInstall)活动的功能.这些都是在用户说"继续,安装"之后但在其他任何事情之前. PrepareToInstall()还允许您通过一个很好的警告取消安装.

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


Dan*_*lle 6

继续Deanna的好答案,代码示例:

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

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

为了返回错误字符串,请在PrepareToInstall中添加以下行:

Result := 'Your Error Description';
Run Code Online (Sandbox Code Playgroud)


Ale*_* K. 5

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

看到; 如何在使用Inno Setup进行安装之前运行文件

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