我正在使用Inno安装程序为我的应用程序创建安装程序。安装程序是非常基本的,只是复制一些文件。这工作得很好,我很高兴。安装期间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
这很有效,非常感谢您的帮助!
非常好,非常感谢,这正是我想要的! :) – brimborium 2012-07-10 16:48:00
我还在我的问题底部添加了我的最终解决方案(使用'[Tasks]'条目)。 – brimborium 2012-07-11 17:11:38
Thx,确实是错字。 ;) – brimborium 2012-07-12 09:32:54