2011-07-25 55 views
8

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

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

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

回答

11

如果需要在安装开始时完成,请在PrepareToInstall()CurStepChanged(ssInstall)事件功能中使用Exec()。 这些都是在用户说过“继续前进,安装”之前,但在任何其他事情之前。 PrepareToInstall()还允许您取消安装,并带有很好的警告。

如果文件需要从安装第一提取出来,然后你可以用ExtractTemporaryFile()

+0

+1,并感谢您的建议,并会尝试该路线。 – odez213

5

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

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

该示例中未提及;要从安装程序获取文件,您将使用ExtractTemporaryFile('your.bat')然后Exec(ExpandConstant('{tmp}\your.bat ...来运行它。

+0

我需要它的设置后,因为我将要抓住用户的输入值。 – odez213

+0

+1对于建议 – odez213

4

继续迪安娜的伟大答案preceed它,代码示例:

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

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

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

​​
+0

那么,当'Exec'失败时,或者当执行的目标返回一个错误(在这种情况下是一个返回某个'ERRORLEVEL'的批处理脚本)时,显示如何处理错误是公平的。 – TLama

+0

Exec是布尔值。所以你可以检查它是真是假。 和ResultCode包含错误代码。 如果不是Exec(.........)然后 开始 结果:='Your Error Description'; 结束 – Danielle

相关问题