2012-07-10 197 views
6

我正在使用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 

这很有效,非常感谢您的帮助!

回答

8

在这种情况下,这是最好的所以它运行无条件地删除安装后旗在安装过程结束时(但在此之前它说完成),并添加一个Check:参数,将其限制在正确的位数:

[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]条目,该条目会在安装程序开始前提示。

+0

非常好,非常感谢,这正是我想要的! :) – brimborium 2012-07-10 16:48:00

+1

我还在我的问题底部添加了我的最终解决方案(使用'[Tasks]'条目)。 – brimborium 2012-07-11 17:11:38

+0

Thx,确实是错字。 ;) – brimborium 2012-07-12 09:32:54

相关问题