我正在使用Inno Setup为我的应用程序创建安装程序。安装程序非常基本,只是复制一些文件。这非常有效,我很满意。
我最近实现了USB支持,需要从IVI基础安装USB驱动程序。它基本上是一个exe文件,必须在安装过程中的某处启动。到目前为止,用户必须单独安装驱动程序,这不是那么优雅。我的第一个方法是:
[Run]
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; Description: "Install USB driver (IVI Foundation)"; Flags: postinstall skipifsilent
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; Description: "Install 64bit USB driver (IVI Foundation)"; Flags: postinstall skipifsilent
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: postinstall skipifsilent
这样可行,但用户必须选择正确的位数。这里的优点是他可以选择不安装它(在这种情况下,应用程序只是忽略USB功能,这很好)。我真正想要的是自动检测系统的位数并运行设置过程。这不一定在[Run]
部分,虽然我没有任何反对意见(因为用户可以选择不安装它)。
我还找到了一些代码并试图像这样运行它:
[Code]
procedure CurStepChanged (CurStep: TSetupStep);
var
WorkingDir: String;
ReturnCode: Integer;
begin
if (ssInstall = CurStep) then
Log('Starting driver installation');
WorkingDir := ExpandConstant ('{app}\driver');
Exec ('IviSharedComponents_2.2.1.exe', '', WorkingDir, SW_SHOW, ewWaitUntilTerminated, ReturnCode);
end;
但这不会启动安装(虽然我可以看到日志条目'启动驱动程序安装')。我的道路有问题吗?我做错了什么?如何更改此脚本以根据位数自动选择正确的可执行文件?
编辑:我使用了[Tasks]
条目的建议解决方案。实现看起来像这样(仅供参考):
[Tasks]
Name: "install_usb"; Description: "Install USB drivers (IVI Foundation)"; GroupDescription: "External drivers:";
[Run]
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Tasks: install_usb; Flags: skipifsilent
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent
这非常有效,非常感谢你的帮助!
答案 0 :(得分:12)
在这种情况下,最好删除postinstall标志,使其在设置过程结束时(但在完成之前)无条件运行,并添加Check:
参数以将其限制为正确的位数:< / p>
[Run]
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Flags: skipifsilent
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Flags: skipifsilent
如果您希望这是有条件的,您可以使用在安装开始前提示的正常[Tasks]
条目。