在 Wix 中获取命令行参数

Posted

技术标签:

【中文标题】在 Wix 中获取命令行参数【英文标题】:Get command line arguments in Wix 【发布时间】:2014-11-28 10:13:24 【问题描述】:

有没有办法获取/枚举使用 msiexec 传递的属性?如果属性拼写错误,我需要显示错误。

【问题讨论】:

【参考方案1】:

由于某种原因,Windows Installer 从未实现属性枚举功能。您可以查询属性表,但这只会让您在构建时在表中定义属性。我知道没有办法做你想做的事。我最好的解决方法是使用 EXE 引导程序前端 MSI 并在那里进行检查。然后,您可以将 EXEDRIVEN=1 之类的内容传递给您的 MSI,然后让您的 MSI 门检查该属性。

另一个想法是使用 CLIENTPROCESSID 在自定义操作中查询 Win32_Process。

【讨论】:

感谢您的回复。我在 msi 日志文件中看到 msiexec 命令行字符串。也许有办法获取传递给 msiexec 的命令行? 您或许可以使用 CLIENTPROCESSID 来查询 Win32_Process 并获取参数。 不幸的是,Windows 不允许访问安装程序进程。我有具有管理员权限的自定义操作:Execute="deferred" Impersonate="no" 您使用即时自定义操作来获取 CLIENTPROCESSID 属性,然后将其作为 CustomActionData 传递以执行延迟自定义操作。 是的。我检查了进程 ID 是否与 msi 日志中报告的相同。【参考方案2】:

命令行设置的所有属性都必须是PUBLIC(大写)属性,如果它们是在命令行设置的,它们应该被添加到属性列表中通过SecureCustomProperties property 分隔的属性列表传递到服务器安装过程。此处未列出的任何属性在延迟安装模式下都将不可用,因为它使用 LocalSystem 帐户(内置操作系统服务帐户)运行,因此可以进行各种更改。用户界面序列以用户权限运行,如果安装以静默方式运行,则可以完全跳过。

如果您保持SecureCustomProperties properties 中的属性列表更新为通过命令行设置的所有接受的属性,您可以使用简单的字符串操作枚举它们。您用分号拆分字符串,然后枚举所有值。您可以在属性表中设置默认值,并在命令行上覆盖它们。您的代码可以检查发送到服务器进程的值是默认值还是已更改。您甚至可以将不可接受的值设置为默认值,因此必须通过命令行覆盖该属性。

注意EnableUserControl property

【讨论】:

似乎不起作用。 SecureCustomProperties 显示:NEWEERFOUND;OLDVERSIONBEINGUPGRADED;SELFFOUND 但没有 msiexec 级别的属性。

以上是关于在 Wix 中获取命令行参数的主要内容,如果未能解决你的问题,请参考以下文章

Wix Burn 没有将命令行参数传递给相关软件包(同一安装程序的旧版本)

C程序获取命令行参数

python和shell获取命令行参数的区别

golang获取命令行参数

Go语言-获取命令行参数

Go语言学习获取命令行参数