检测无人参与安装的msi参数

时间:2010-03-02 20:25:46

标签: parameters windows-installer

我有一个msi软件包,可以选择安装两种不同的语言,是否有办法检测负责选择语言的参数,以便我可以使用命令提示符静默安装软件包(无人值守安装)?

由于

2 个答案:

答案 0 :(得分:7)

使用MSI执行操作的常规方法是属性表中任何以大写字母命名的属性都被视为公共外部属性。这意味着从命令行运行MSI时可以设置它。

因此,如果您想知道如何标记语言选择,请为其添加属性,然后您可以将MSI中的组件或功能的安装链接到该标志/变量。

因此,如果您还不熟悉这些概念,请查看MSI的组件功能属性。您没有提到您正在使用的MSI构建器 - 如果您使用Visual Studio附带的那个,我不知道它是否能够访问组件和功能,但有一个或两个低价或者那里的免费(即Wix)替代品(如果你使用像Wise或InstallShield这样的东西那么你可以完全控制所有这些东西)。

编辑: here is a link到一个脚本,它将为您提取公共属性列表(单击文本获取MSI-File properties.vbs 到看脚本)。或者,How can I see what public properties are available?Extracting properties from MSI file without installing可能会为您提供其他选项。

ServerFault上的那些人可能会用这个来帮助更多,我知道有一些Windows管理工具允许你拆解和/或包装MSis但我不记得是什么他们被称为。

答案 1 :(得分:2)

注意:我在不同的StackExchange网站上发布了此响应的变体,以解决类似问题。)

lessmsi 是一个很棒的工具,如果您愿意弹出它的GUI并进行一些手动调查的话,肯定可以在这里使用。

如果您正在寻找快速修复,可以尝试:

lessmsi l -tProperty <msi_name>

不幸的是,以上命令可能不会输出您要查找的属性(注:输出为csv格式)。

从本质上保证您拥有所有可能属性的一种方法是使用MSI文件实际执行安装,修复或卸载并记录该过程。以下命令仅记录属性,而没有记录其他内容:

<msi_name> /lp! <msi_property_logfile>

以上命令等效于:

msiexec /lp! <msi_property_logfile> /i <msi_name>

但是,我的首选方法是实际安装/删除/修复(并简单地提取)。与 lessmsi 相比,此方法的优势在于它不需要第三方工具(即 lessmsi ),并且不需要您搞乱任何安装。既然您有足够的磁盘空间来实际安装程序,则可以执行以下操作:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

请注意,<absolute_path_to_extract_to>可以指向不存在的目录(该命令将创建必要或失败的目录)。

如果您出于任何原因而讨厌安装UI,则可以附加/qr选项,该选项将“减少”并消除该UI,而不会影响属性记录过程。不过请注意-如果您的界面比精简的用户界面“更低”(即/qb | /passive/qn | /quiet),则您的<msi_property_logfile>可能缺少一些属性。

该过程完成后,您只需打开日志文件并注意以Property(S): / Property(C):开头的行。一般而言,可以为安装设置的参数/属性记录在ALL CAPS中。例如,可以将ALLUSERS设置为ALLUSERS=1,以使安装适用于所有用户。

因此,对于刚刚给出的示例,您的无人参与模式安装可能类似于:

msiexec /i <msi_name> /passive ALLUSERS=1