一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

我正在使用Inno Setup为我的应用程序创建安装程序.安装程序非常基本,只是复制一些文件.这非常有效,我很满意.

我最近实现了USB支持,需要从IVI基础安装USB驱动程序.它基本上是一个exe文件,必须在安装过程中的某个地方启动.到目前为止,用户必须单独安装驱动程序,这不是那么优雅.我的第一个方法是:

1 [Run]
2 Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; Description: "Install USB driver (IVI Foundation)"; Flags: postinstall skipifsilent
3 Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; Description: "Install 64bit USB driver (IVI Foundation)"; Flags: postinstall skipifsilent
4 Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName,"&","&&")}}"; Flags: postinstall skipifsilent

这样可行,但用户必须选择正确的位数.这里的优点是他可以选择不安装它(在这种情况下,应用程序只是忽略USB功能,这很好).我真正想要的是自动检测系统的位数并运行设置过程.这不必在[Run]部分,虽然我没有任何反对它(因为用户可以选择不安装它).

我还找到了一些代码并试图像这样运行它:

复制代码
 1 de]
 2 procedure CurStepChanged (CurStep: TSetupStep);
 3 var
 4    WorkingDir:   String;
 5    ReturnCode:   Integer;
 6 begin    
 7    if (ssInstall = CurStep) then
 8      Log('Starting driver installation');
 9      WorkingDir := ExpandConstant ('{app}\driver');
10      Exec ('IviSharedComponents_2.2.1.exe','',WorkingDir,SW_SHOW,ewWaitUntilTerminated,ReturnCode);
11 end;
复制代码

但这不会启动安装(虽然我可以看到日志条目’启动驱动程序安装’).我的道路有问题吗?我做错了什么?如何更改此脚本以根据位数自动选择正确的可执行文件?

编辑:我在[任务]条目中使用了建议的解决方案.实现看起来像这样(仅供参考):

复制代码
1 [Tasks]
2 Name: "install_usb"; Description: "Install USB drivers (IVI Foundation)"; GroupDescription: "External drivers:";
3  
4 [Run]
5 Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Tasks: install_usb; Flags: skipifsilent
6 Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent
复制代码

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

解决方法

在这种情况下,最好删除postinstall标志,使其在设置过程结束时(但在完成之前)无条件运行,并添加Check:参数以将其限制为正确的位数:
1 [Run]
2 Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Flags: skipifsilent
3 Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Flags: skipifsilent

如果您希望这是有条件的,您可以使用在安装开始之前提示的正常[任务]条目.

posted on   一杯清酒邀明月  阅读(3246)  评论(2编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示