C# 高级安装程序,通过命令行调用带有标志/参数的自定义MSI?

C# 高级安装程序,通过命令行调用带有标志/参数的自定义MSI?,c#,windows-installer,advanced-installer,C#,Windows Installer,Advanced Installer,我已经创建了一个自定义MSI包,并且正在与高级安装程序合作,尝试添加某种命令行参数,一个可以触发的“标志”。当该标志被触发时,它将导致安装程序中发生一系列事件(删除某些文件、移动文件夹、提取zip文件等等) 换句话说,假设我从名为Installer.exe的高级安装程序生成了exe 我想从命令行调用installer.exe--triggerEvents,它将在安装程序本身中触发一系列自定义事件 经过一番研究,我发现了这篇与我的问题相关的非常好的文章: 但看来,作者严格地关注的是MSI,而不是

我已经创建了一个自定义MSI包,并且正在与高级安装程序合作,尝试添加某种命令行参数,一个可以触发的
“标志”
。当该标志被触发时,它将导致安装程序中发生一系列事件(删除某些文件、移动文件夹、提取zip文件等等)

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

我想从命令行调用
installer.exe--triggerEvents
,它将在安装程序本身中触发一系列自定义事件

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

但看来,作者严格地关注的是MSI,而不是高级安装程序,我更愿意利用我正在使用的这个应用程序


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

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

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

从命令行调用msi时,可以如下设置公共属性的值:

msiexec.exe /i "C:\MyAwesomeApp.msi" AWESOME_PROP="myValue"
根据您的描述,您似乎正在编译您的。我的理解是,引导程序exe将代表您将公共属性的参数传递到MSI,ala:

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

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

谢谢你,你的回答帮了我很多。你是在创建一个合适的微星还是一个假的微星?通常MSI不能通过提取ZIP文件来工作。它违背了MSI的目的,因为你不能支持回滚和恢复等功能。我只是举了一些例子,我想Zip文件是一个错误的选择。它唯一要做的就是备份几个文件,提取证书进行备份并删除其余的文件;然后重新安装新版本。