【问题标题】:Advanced Installer, calling my custom MSI with a flag/argument via command line?高级安装程序,通过命令行使用标志/参数调用我的自定义 MSI?
【发布时间】:2013-01-29 09:33:33
【问题描述】:

我创建了一个自定义 MSI 包,我正在使用 Advanced Installer 尝试添加某种命令行参数,即可以触发的 "flag"。当该标志被触发时,它将导致安装程序中发生一系列事件(删除某些文件、移动文件夹、提取 zip 文件......等等......

换句话说,假设我从名为installer.exe 的高级安装程序生成了exe

我想通过命令行调用installer.exe --triggerEvents 来触发安装程序本身内的一系列自定义事件..

经过一番研究,我发现了这篇与我的问题有关的非常好的文章:

How to Pass Command Line Arguments to MSI Installer Custom Actions

但作者似乎只专注于 MSI 而不是 Advanced Installer,我更愿意利用我正在使用的这个应用程序。

是否可以通过传入我想要的任何参数来简单地调用安装程序,并使用会话通过自定义操作来获取它?或者有没有办法用 AI 做到这一点?

【问题讨论】:

  • 您是在创建正确的 MSI 还是伪造的 MSI?通常 MSI 不能通过提取 ZIP 文件来工作。它违背了 MSI 的目的,因为您无法支持回滚和弹性等功能。
  • 我只是举个例子,我猜 Zip 文件是一个糟糕的选择。它唯一要做的就是备份几个文件,提取证书进行备份并删除其余文件;然后重新安装新版本。

标签: c# windows-installer advanced-installer


【解决方案1】:

您应该能够使用 AdvancedInstaller(安装参数页面,属性)在您的 MSI 中创建public property。请注意,公共属性必须ALL_CAPS,而私有属性可以包含小写字母。

在您的自定义操作中引用公共属性以在运行时检索该属性的值。

从命令行调用 msi 时,您可以像这样设置公共属性的值:

msiexec.exe /i "C:\MyAwesomeApp.msi" AWESOME_PROP="myValue"

根据您的描述,您似乎正在编译您的MSI into a bootstrapper。我的理解是,引导程序 exe 会代表您将公共属性的参数传递到 MSI,ala:

C:\MyAwesomeApp.exe /i AWESOME_PROP="myValue"

我发现要让您的自定义操作引用公共属性的内容并按照您希望它们的方式运行,需要大量的试验和错误,但这可能是因为我不是擅长创作 MSI。就我而言,我发现构建小型测试安装程序作为概念证明或多或少有助于我调试我正在尝试做的事情。一旦我做对了,我就把它添加到我正在使用的实际 AIP 文件中,并在那里进行测试。冲洗并根据需要重复!

【讨论】:

  • 谢谢,您的回答对我帮助很大。
猜你喜欢
  • 2019-06-24
  • 2012-12-17
  • 2022-11-13
  • 1970-01-01
  • 2015-02-17
  • 2017-10-30
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
相关资源
最近更新 更多