这是到目前为止我的代码的Files部分:
[Files]
Source: "other_installer.exe"; DestDir: "{app}"
Source: "myprogram.exe"; DestDir: "{app}"
Source: "data.dat"; DestDir: "{app}"
Source: "otherdata.dat"; DestDir: "{app}"
我的程序依赖于另一个程序才能运行。我已经在我的安装程序中包含了这个程序的安装程序("other_installer.exe")。我想要做的是,一旦这个安装程序被复制,就立即启动它,然后继续"myprogram.exe“和其他工作。
我在谷歌上搜索并在Inno设置帮助中找到了BeforeInstall的文档,但他们没有运行其他应用程序的示例。我认为应该是这样的:
[Files]
Source: "other_installer.exe"; DestDir: "{app}"
Source: "myprogram.exe"; DestDir: "{app}"; BeforeInstall: // RUN OTHER_INSTALLER.EXE //
Source: "data.dat"; DestDir: "{app}"
Source: "otherdata.dat"; DestDir: "{app}"
发布于 2013-10-25 20:33:18
更好的方法可能是使用AfterInstall
参数。以下脚本将在处理完OtherInstaller.exe
文件条目后立即执行RunOtherInstaller
函数。在那里,它尝试执行刚刚安装的OtherInstaller.exe
文件,如果执行失败,它会向用户报告一条错误消息。请注意,您不能从该函数中断安装,因此以这种方式执行您想要的操作并不安全:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Files]
Source: "OtherInstaller.exe"; DestDir: "{app}"; AfterInstall: RunOtherInstaller
Source: "OtherFile.dll"; DestDir: "{app}"
[Code]
procedure RunOtherInstaller;
var
ResultCode: Integer;
begin
if not Exec(ExpandConstant('{app}\OtherInstaller.exe'), '', '', SW_SHOWNORMAL,
ewWaitUntilTerminated, ResultCode)
then
MsgBox('Other installer failed to run!' + #13#10 +
SysErrorMessage(ResultCode), mbError, MB_OK);
end;
发布于 2013-10-28 02:34:14
运行先决条件安装程序的另一个好时机是在PrepareToInstall
事件函数中。(有关基本结构,请参阅Inno提供的示例脚本,有关实际执行,请参阅TLama的代码。)
PrepareToInstall
的主要优点是它允许您处理来自子安装程序的错误和重启请求--使用AfterInstall
做不到这一点。
它的主要缺点是您必须手动ExtractTemporaryFile
运行子安装所需的任何内容,因为这发生在解压文件之前。
发布于 2013-10-25 20:48:33
您可以使用AfterInstall,请在帮助中查找此内容。当文件复制完成后,我将启动您设置为"AfterInstall:“的函数/过程。
在此函数/过程中,使用Exec并启动其他安装程序。
https://stackoverflow.com/questions/19589309
复制相似问题