我能否以某种方式在用户界面中输入的值获取到我的自定义操作安装程序类代码中
本文关键字:我的 自定义 获取 操作 代码 程序 安装 输入 方式 用户界面 | 更新日期: 2023-09-27 18:33:11
这似乎应该很简单。我有一个Windows安装程序项目。在 UI 中,我添加了一个带有 2 个单选按钮的对话框。安装程序对"安装"有一个自定义操作,该操作使用我的一个项目的主要输出中的安装类。是否可以从安装程序类的 Install
方法中获取所选单选按钮的值?
若要获取/设置属性,您需要一个 MSI 句柄,据我所知,您无法从 .NET 安装程序类自定义操作中获取该句柄。
您可以做的是将自定义操作配置为接受新参数,并在配置自定义操作时将属性的值分配给这些参数。
如果这是一个 Visual Studio 安装程序项目,并且似乎是,则添加的 RadioButton 对话框的属性窗口会告诉您属性名称BUTTON2,因此这就是您使用标准/mybutton=[BUTTON2] 类型的语法传递到自定义操作安装程序类中的内容,以便使用安装程序类中 Context.Parameters 集合中的键 mybutton 获取值。
对话框行为描述如下:
https://msdn.microsoft.com/en-us/library/vstudio/9x23561f(v=vs.100(.aspx
你最终会在代码中获得 1 或 2 的值,具体取决于选择了哪个值。通过安装程序类,Visual Studio 提供了围绕调用的基础结构,包括 CustomActionData 处理
喜欢这个:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/279e0aea-077c-4150-89ae-55d8494def1b/installer-class-passing-parameters
http://blog.billsdon.com/2011/05/passing-parameters-collected-dialog-custom-action-msi-c/
如果您使用 WiX 部署工具基础 (DTF( 开发自定义操作,您可以访问以下属性:
- 通过
session[property name]
立即执行(诚然,我对这种方法不太熟悉,所以您可能需要进行一些实验( 有关更多详细信息,请参阅此堆栈溢出问题 - 通过
CustomActionData
延迟执行- 您可以在安装程序中的其他位置使用属性的值填充
CustomActionData
,并读取为session.CustomActionData[property name]
- 您可以在安装程序中的其他位置使用属性的值填充
CustomActionData 的一个技巧是,您的属性名称必须与自定义操作的名称匹配,并且您以分号分隔的名称=值对列表的形式提供值,例如 Name1=value1;Name2=value2
等
您还需要通过MakeSfxCA.exe
运行程序集,以使安装程序可以使用您的操作。您可以在Visual Studio中将其作为构建后事件。
基于 DTF 的 .Net 自定义操作可用于 WiX 或 InstallShield 安装程序(可能是生成 MSI 安装程序的任何工具(。