我想在安装过程中显示自定义操作的进度文本。我在WiX Progress Text for a Custom Action中实现了代码,但它不起作用。
显示所有其他文本(例如文件副本),正确填充ActionText表,并且ActionText.Action与CustomAction.Actuib值匹配。有谁知道出了什么问题?这是代码:
主要WiX项目:
<Product>
<CustomAction Id="MyCA" BinaryKey="MyCALib"
DllEntry="MyCAMethod" Execute="deferred"
Return="check" />
<InstallExecuteSequence>
<Custom Action="MyCA" Before="InstallFinalize" />
</InstallExecuteSequence>
<UI>
<UIRef Id="MyUILibraryUI" />
</UI>
</Product>
UI库:
<Wix ...><Fragment>
<UI Id="MyUILibraryUI">
<ProgressText Action="MyCA">Executing my funny CA...
</ProgressText>
...
<Dialog Id="Dialog_Progress" ...>
<Control Id="Ctrl_ActionText"
Type="Text" ...>
<Subscribe Event="ActionData" Attribute="Text" />
</Control>
...
C#自定义动作库:
public class MyCALib
{
[CustomAction]
public static ActionResult MyCAMethod(Session session)
{
System.Threading.Thread.Sleep(10000); // to show text
// do something
System.Threading.Thread.Sleep(10000); // to show text
return ActionResult.Success;
}
}
答案 0 :(得分:2)
问题是您使用的是“ActionData”,但是您没有使用自定义操作中的此操作数据向UI发送消息。
您必须添加以下内容:
public class MyCALib
{
[CustomAction]
public static ActionResult MyCAMethod(Session session)
{
using (Record record = new Record(0))
{
record.SetString(0, "Starting MyCAMethod");
Session.Message(InstallMessage.ActionData, record);
}
System.Threading.Thread.Sleep(10000); // to show text
// do something
System.Threading.Thread.Sleep(10000); // to show text
return ActionResult.Success;
}
}
您可以根据需要从CA发送任意数量的邮件。
如果您使用的是“ActionText”,它将起作用,但会显示自定义操作名称,而无需其他/自定义信息。
您可以在此处找到更多信息:
WiX: dynamically changing the status text during CustomAction