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

Wel*_*Wel 12 parameters windows-installer

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

谢谢

slu*_*ter 8

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

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

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

编辑: 这是一个脚本链接,它将为您提取公共属性列表(单击文本获取MSI-File属性.vbs以查看脚本).或者,我如何查看可用的公共属性?并且无需安装从提取MSI文件属性可以提供你一些其他的选择.

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


Yen*_*ang 5

注意:我在另一个 StackExchange 网站上针对类似问题发布了此回复的变体。)

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

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

lessmsi l -tProperty <msi_name>
Run Code Online (Sandbox Code Playgroud)

不幸的是,上面的命令很可能不会输出您正在查找的属性(旁注:输出为 csv 格式)。

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

<msi_name> /lp! <msi_property_logfile>
Run Code Online (Sandbox Code Playgroud)

上面的命令相当于:

msiexec /lp! <msi_property_logfile> /i <msi_name>
Run Code Online (Sandbox Code Playgroud)

然而,我的首选方法是实际安装/删除/修复(而是简单地提取)。与lessmsi相比,此方法的优点是它不需要第 3 方实用程序(即lessmsi),并且不需要您搞乱任何安装。如果您有足够的磁盘空间来实际安装该程序,您可以执行以下操作:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>
Run Code Online (Sandbox Code Playgroud)

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

如果您出于某种原因讨厌安装 UI,您可以附加该/qr选项,这将“减少”甚至可能消除 UI,而不会影响属性日志记录过程。但请注意,如果您的界面“低于”简化后的 UI(即/qb|/passive/qn| /quiet),您<msi_property_logfile>可能会丢失一些属性。

该过程完成后,您只需打开日志文件并记下以Property(S):/开头的行Property(C):。一般来说,可以为安装设置的参数/属性以全部大写形式记录;例如,ALLUSERS可以设置ALLUSERS=1为所有用户安装。

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

msiexec /i <msi_name> /passive ALLUSERS=1
Run Code Online (Sandbox Code Playgroud)