【发布时间】:2026-02-08 23:20:11
【问题描述】:
有没有办法获取/枚举使用 msiexec 传递的属性?如果属性拼写错误,我需要显示错误。
【问题讨论】:
标签: windows wix installation windows-installer wix3.7
有没有办法获取/枚举使用 msiexec 传递的属性?如果属性拼写错误,我需要显示错误。
【问题讨论】:
标签: windows wix installation windows-installer wix3.7
由于某种原因,Windows Installer 从未实现属性枚举功能。您可以查询属性表,但这只会让您在构建时在表中定义属性。我知道没有办法做你想做的事。我最好的解决方法是使用 EXE 引导程序前端 MSI 并在那里进行检查。然后,您可以将 EXEDRIVEN=1 之类的内容传递给您的 MSI,然后让您的 MSI 门检查该属性。
另一个想法是使用 CLIENTPROCESSID 在自定义操作中查询 Win32_Process。
【讨论】:
在命令行设置的所有属性都必须是PUBLIC(大写)属性,如果它们是在命令行设置的,它们应该被添加到属性列表中通过SecureCustomProperties property 分隔的属性列表传递到服务器安装过程。此处未列出的任何属性在延迟安装模式下都将不可用,因为它使用 LocalSystem 帐户(内置操作系统服务帐户)运行,因此可以进行各种更改。用户界面序列以用户权限运行,如果安装以静默方式运行,则可以完全跳过。
如果您保持SecureCustomProperties properties 中的属性列表更新为通过命令行设置的所有接受的属性,您可以使用简单的字符串操作枚举它们。您用分号拆分字符串,然后枚举所有值。您可以在属性表中设置默认值,并在命令行上覆盖它们。您的代码可以检查发送到服务器进程的值是默认值还是已更改。您甚至可以将不可接受的值设置为默认值,因此必须通过命令行覆盖该属性。
【讨论】: