Wix DoAction以更新文本
是否可以在Wix更新文本对话框中进行自定义操作?我一直在寻找各种方法来做这件事,但对我来说什么都不管用 我有一个按钮控件定义为Wix DoAction以更新文本,wix,windows-installer,Wix,Windows Installer,是否可以在Wix更新文本对话框中进行自定义操作?我一直在寻找各种方法来做这件事,但对我来说什么都不管用 我有一个按钮控件定义为 <Control Id="RunButton" Type="PushButton" X="0" Y="0" Height="18" Width="56" Text="Run"> <Publish Event="DoAction" Value="CustomAction">1</Publish> </Control>
<Control Id="RunButton" Type="PushButton" X="0" Y="0" Height="18" Width="56" Text="Run">
<Publish Event="DoAction" Value="CustomAction">1</Publish>
</Control>
这是我在许多论坛上发现的基本流程,但它对我不起作用
该操作定义为Execute=“immediate”和Return=“Check”
我还尝试将“Record”对象更改为3个字段,并将相同的属性设置为字段1、2和3。这也不管用
谁能解释一下我做错了什么?这在Wix中是不可行的吗?本质上,我试图在自定义操作中设置一个长时间运行的流程,并希望能够向用户报告操作的进度 如果您检查文档的操作: 它说您不能通过MsiProcessMessage发送消息,而session.message实际上就在它下面,所以这很可能是它无法工作的原因。我怀疑您正在查看的论坛描述了MsiProcessMessage的一般用法,而没有对这一特殊情况提出警告 不知道自定义操作在做什么,我不能提出任何建议。在执行序列中,您可以将CA与进度条集成,但您处于UI序列中,可能正在收集大量数据或检查某些内容
如果您的自定义操作更新了系统,则它应作为延迟的自定义操作处于执行序列中。这不仅可以影响进度条并提供说明发生了什么的文本,而且安装可能会失败,或者用户可能会取消安装,事务性安装的全部要点是,失败会将其回滚,就像安装从未启动一样。这意味着您应该保存数据库并在回滚自定义操作中恢复它。您可能遇到的另一个问题是UI中的即时自定义操作没有提升,因此您可能无法更新数据库。不仅如此,静默安装绕过UI,因此不会调用自定义操作,并且无法使用组策略或SCCM方法推出产品 如果您检查文档的操作: 它说您不能通过MsiProcessMessage发送消息,而session.message实际上就在它下面,所以这很可能是它无法工作的原因。我怀疑您正在查看的论坛描述了MsiProcessMessage的一般用法,而没有对这一特殊情况提出警告 不知道自定义操作在做什么,我不能提出任何建议。在执行序列中,您可以将CA与进度条集成,但您处于UI序列中,可能正在收集大量数据或检查某些内容
如果您的自定义操作更新了系统,则它应作为延迟的自定义操作处于执行序列中。这不仅可以影响进度条并提供说明发生了什么的文本,而且安装可能会失败,或者用户可能会取消安装,事务性安装的全部要点是,失败会将其回滚,就像安装从未启动一样。这意味着您应该保存数据库并在回滚自定义操作中恢复它。您可能遇到的另一个问题是UI中的即时自定义操作没有提升,因此您可能无法更新数据库。不仅如此,静默安装绕过UI,因此不会调用自定义操作,并且无法使用组策略或SCCM方法推出产品 Windows Installer的内部UI不会间接更新太多。从根本上说,您必须决定是要进行一次更新(更像您的描述),还是要查找进度消息(更像您的方法)。对于进度消息,您应该注意PhilDW的回答,因为这需要成为执行序列的一部分。对于UI事件(如用户单击按钮)的一次性更新,请考虑使用属性和SETFITCH控件事件:
- 控件应显示包含属性引用的文本,例如
布丁:[FLAVOR]
- 您的DoAction控件事件可以设置一些属性,甚至可能是
本身,但为了清楚起见,我可能建议从DoAction设置FLAVOR
FLAVOR\u
- 然后添加一个SetProperty控件事件,该事件将
设置为FLAVOR
。这将更新控件的文本[FLAVOR\u FROMDOACTION]
- 控件应显示包含属性引用的文本,例如
布丁:[FLAVOR]
- 您的DoAction控件事件可以设置一些属性,甚至可能是
本身,但为了清楚起见,我可能建议从DoAction设置FLAVOR
FLAVOR\u
- 然后添加一个SetProperty控件事件,该事件将
设置为FLAVOR
。这将更新控件的文本[FLAVOR\u FROMDOACTION]
- Windows Installer的内部用户界面不会间接更新。从根本上说,您必须决定是要进行一次更新(更像您的描述),还是要查找进度消息(更像您的方法)。对于进度消息,您应该注意PhilDW的回答,因为这需要成为执行序列的一部分。对于UI事件(如用户单击按钮)的一次性更新,请考虑使用属性和SETFITCH控件事件:
<Control Id="MessageText" X="0" Y="20" Width="100" Height="18">
<Subscribe Event="ActionData" Attribute="Text" />
</Control>
using(var rec = new Record(0)){
rec.SetString(0, "Starting...");
session.Message(InstallMessage.ActionData, rec);
}