我正在编写我们的客户经常需要安装的几个软件包的安装程序/软件包。基本上它只包含几个可执行的安装程序。对于用户选择的每个组件,它将安装程序提取到临时文件夹并运行它。
其中一个安装程序适用于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)我当前的解决方案是在第三方安装程序完成后休眠10秒钟,然后使用NSIS的BringToFront
命令将我的安装程序窗口置于最前面。它在Windows 7 Pro上适用于我,但我听说它并不总是有效,可能只是突出显示窗口。
3)执行静默安装似乎不起作用。当我从命令行尝试它时,第三方安装程序只运行一段时间然后退出。如果你能做到这一点,请告诉我。
4)不幸的是,我不能最后运行第三方安装程序,因为我的其他安装程序之一需要在它之后运行并将一些文件复制到其安装目录中。
我的安装程序是用NSIS编写的,如果这有所不同的话。谢谢你的建议!
感谢Michael Urman(InstallShield的技术主管!)和Christopher Painter的提示。 Christopher说有问题的安装程序是InstallScript InstallShield安装程序,而不是基于MSI的InstallShield安装程序。我发现这篇关于InstallScript vs. 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文件看起来类似于我尝试静默安装时创建的文件。如果需要,您可以看到contents of setup.iss。
我想知道:在安装程序中安装setup.exe是不正常的,还是Atmel做了一些奇怪的事情?运行此setup.exe是否等同于运行as5installer-stable-5.1.208-full.exe?此外,在安装程序中安装setup.iss以及它的用途是否正常?
您还可以使用7-zip查看安装程序中的文件,但这些文件似乎不是完全提取的。
克里斯托弗的建议是.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文件,还是唯一目的?
答案 0 :(得分:1)
复选框与属性相关联,通常这些属性是公共属性。如果是这样,您可以在命令行上覆盖该属性,msiexec /i the.msi PROPERTY=override-value
或setup.exe /v"PROPERTY=override-value"
。但是,它可能是私有财产,或者在安装程序内部被覆盖。在这种情况下,您可能需要创建transform。 (通过在命令行的TRANSFORMS属性中列出转换来应用转换。)
根据安装是基于InstallScript的安装的更新,上述命令行建议不适用。自定义脚本可以使它们(或类似的东西)起作用,但这种情况并不常见。更常见的是对Christopher在/r
和/s
参数的答案中提到的对静音脚本的支持。然而,听起来有问题的安装可能已经使用静默脚本做了一些有趣的事情,因此集成此方法可能无效。我建议重新包装(如Chris所有)或联系供应商。
答案 1 :(得分:1)
好的,我终于找到了一些空闲时间来下载EXE,这就是我找到的。
这是一个InstallScript安装程序,而不是MSI。因此,运行以下命令(从提升的命令提示符):
as5installer-stable-5.1.208-full /extract_all:c:\extract
现在抓取在C:\ extract \ disk1
中找到的文件对于InstallScript项目,您有记录和回放UI的概念。
该软件包已有一个setup.iss文件。看一下它的结尾:
[{D574D18C-9D52-4B4B-9647-AE6B89FD3F70}-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0
bOpt3=0
其中一个布尔选项是您需要更改的值。我会留给你弄清楚剩下的。您可能必须记录一个新的ISS文件,并且总是有人写了一些craptastic installscript,无论你做什么,总是将该复选框设置为true。在这些情况下,您必须打破重新打包工具并将其转换为MSI格式。