我正在编写我们的客户经常需要安装的几个软件包的安装程序/捆绑包。基本上它只包含几个可执行的安装程序。对于用户选择的每个组件,它会将安装程序提取到一个临时文件夹并运行它。
其中一个安装程序适用于 AVR Studio 5.1,由第三方 (Atmel) 制作。它可以在这里下载:http: //www.atmel.com/Images/as5installer-stable-5.1.208-full.exe (616 MB)。
不幸的是,Atmel 在安装程序的末尾添加了一个复选框,让用户可以选择启动 AVR Studio 5.1,默认情况下它是选中的:
如果用户只是单击“完成”,大多数用户可能会这样做,那么 AVR Studio 5 将接管屏幕,而我的安装程序将留在后台。用户可能会忘记我的安装程序并且无法完成捆绑包的其他组件的安装。
谁能想到一个好的解决方案?我想到了一些:
1) 第三方安装程序似乎是用 InstallShield 编写的。是否有一些标准方法可以将命令行选项传递给 InstallShield 安装程序以禁用复选框或将其默认状态更改为未选中?
2) 我目前的解决方案是在第 3 方安装程序完成后休眠 10 秒,然后使用 NSIS 的BringToFront
命令将我的安装程序窗口置于最前面。它适用于 Windows 7 Pro,但我听说它并不总是有效,可能只是突出显示窗口。
3) 进行静默安装似乎不起作用。当我从命令行尝试它时,第 3 方安装程序只运行了一会儿然后退出。如果你让它工作,请告诉我。
4) 不幸的是,我不能最后运行第 3 方安装程序,因为我的其他安装程序之一需要在它之后运行并将一些文件复制到其安装目录中。
我的安装程序是用 NSIS 编写的,如果这有什么不同的话。感谢您的任何建议!
更新 1,2012-02-27,下午 6:30:
感谢 Michael Urman(InstallShield 的技术负责人!)和 Christopher Painter 的提示。Christopher 说有问题的安装程序是 InstallScript InstallShield 安装程序,而不是基于 MSI 的 InstallShield 安装程序。我发现这篇关于InstallScript 与 InstallScript MSI的文章帮助我理解了差异。
我们现在有两种从安装程序中提取文件的方法:使用UniExtract或运行as5installer-stable-5.1.208-full.exe /extract_all:c:\extract
. 这两种方法似乎提取了同一组文件,您可以在此处看到:
我无法通过双击它们或使用 UniExtract 来提取 *.cab 文件。我无法使用 UniExtract 提取 setup.exe。我可以运行 setup.exe,它的行为似乎与 as5installer-stable-5.1.208-full.exe 相同。有一个 setup.iss 文件,它看起来类似于我尝试静默安装时创建的文件。如果需要,您可以查看setup.iss 的内容。
我想知道:在安装程序中有 setup.exe 是正常的,还是 Atmel 做了一些奇怪的事情?运行这个 setup.exe 是否等同于运行 as5installer-stable-5.1.208-full.exe?另外,在安装程序中有一个 setup.iss 是否正常,它有什么用途?
您还可以使用 7-zip 查看安装程序中的文件,但它是一组不同的文件,似乎没有完全解压缩。
Christopher 的建议是 .iss 文件末尾的 bOpt1、bOpt2 或 bOpt3 选项之一对应于我要禁用的复选框。结合 Michael 的建议,我尝试使用以下命令安装 AVR Studio 5.1:
as5installer-stable-5.1.208-full.exe /v"bOpt1=0 bOpt2=0 bOpt3=0"
as5installer-stable-5.1.208-full.exe /v"bOpt1= bOpt2= bOpt3="
setup.exe /v"bOpt1= bOpt2= bOpt3="
不幸的是,我没有观察到行为上的任何差异。该复选框仍处于选中状态,当我单击“完成”时,它仍会启动 AVR Studio 5.1。也许我以错误的方式在命令行上指定了多个属性覆盖?我还有一些想法可以尝试,但我很想知道其他人是否也有任何想法。有没有办法在不进行静默安装的情况下使用 .iss 文件,或者这是它的唯一目的?