0

我正在编写我们的客户经常需要安装的几个软件包的安装程序/捆绑包。基本上它只包含几个可执行的安装程序。对于用户选择的每个组件,它会将安装程序提取到一个临时文件夹并运行它。

其中一个安装程序适用于 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 完成屏幕

如果用户只是单击“完成”,大多数用户可能会这样做,那么 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. 这两种方法似乎提取了同一组文件,您可以在此处看到:

从 /extract_all 选项检索的文件。

我无法通过双击它们或使用 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 文件,或者这是它的唯一目的?

4

2 回答 2

2

复选框与属性相关联,通常这些将是公共属性。如果是这样,您可能会在命令行上覆盖该属性,要么msiexec /i the.msi PROPERTY=override-value,要么setup.exe /v"PROPERTY=override-value"。但是,它可能是私有属性,或者在安装程序中被覆盖。在这种情况下,您可能不得不创建一个转换。(通过在命令行的 TRANSFORMS 属性中列出它来应用转换。)

鉴于安装是基于 InstallScript 的更新,上述命令行建议不适用。自定义脚本可以使它们(或类似的东西)工作,但这并不常见。更常见的是对静默脚本的支持,正如克里斯托弗在他的回答中提到的/r/s参数。然而,听起来有问题的安装可能已经使用静默脚本做了一些有趣的事情,因此集成这种方法可能不起作用。我建议重新包装(正如 Chris 所做的那样)或联系供应商。

于 2012-02-24T13:24:55.960 回答
1

好的,我终于找到了一些空闲时间来下载该 EXE,这就是我找到的。

它是一个 InstallScript 安装程序,而不是 MSI。所以运行以下命令(从提升的命令提示符):

as5installer-stable-5.1.208-full /extract_all:c:\extract

现在抓取在 C:\extract\disk1 中找到的文件

对于 InstallScript 项目,您有记录和回放 UI 的概念。

  • /r - 记录
  • /s - 静音
  • /f1 - 静默响应文件 (.iss) 的路径
  • /f2 - 日志文件路径

该软件包已经有一个 setup.iss 文件。看看它的结尾:

[{D574D18C-9D52-4B4B-9647-AE6B89FD3F70}-SdFinish-0]
Result=1
bOpt1=0
bOpt2=0
bOpt3=0

这些布尔选项之一是您需要更改的值。我会把它留给你来弄清楚其余的。您可能必须记录一个新的 ISS 文件,并且总是可能有人编写了一些古怪的安装脚本,无论您做什么,总是将该复选框设置为 true。在这些情况下,您必须打破重新打包工具并将其转换为 MSI 格式。

于 2012-02-27T04:40:21.867 回答