Wix Installer自定义MsiRMFilesInUse对话框重复报错及不显示问题求解
问题原因
你遇到的两个问题根源都是对Wix内置属性的依赖逻辑不熟悉:
Duplicate symbol 'Property:WixUIRMOption'报错是因为你复制默认对话框代码到自定义文件时,重复声明了WixUIExtension已经内置定义的WixUIRMOption属性- 修改属性ID后对话框不弹出,是因为
WixUIRMOption是Wix重启管理器逻辑的固定依赖属性,修改ID后内置逻辑找不到对应配置,自然不会触发对话框显示
正确配置步骤
1. 解决属性重复报错
直接删除你自定义对话框wxs文件中<Property Id="WixUIRMOption" ... />这行声明,直接复用WixUIExtension内置的该属性即可,不需要做任何修改,也不用改属性ID。
2. 正确覆盖默认对话框
自定义的对话框ID保持和默认IDMsiRMFilesInUse完全一致,Wix链接时会优先使用你项目中定义的同ID对话框,自动覆盖内置的默认对话框,不需要修改对话框ID或者关联逻辑。
你只需要修改对话框内控件的文本属性为你需要的本地化内容即可,如果是做多语言适配,用Wix原生的本地化变量即可,示例代码如下:
<UI> <!-- 对话框ID和默认完全一致,实现覆盖 --> <Dialog Id="MsiRMFilesInUse" Width="370" Height="270" Title="!(loc.InstallerTitle)"> <!-- 仅修改Text属性为你自定义的本地化内容,其余控件属性、事件绑定完全沿用默认代码 --> <Control Id="MessageText" Type="Text" X="135" Y="70" Width="220" Height="60" Text="!(loc.CustomRMInUseMessage)" /> <Control Id="OkButton" Type="PushButton" X="220" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.Ok)"> <Publish Event="EndDialog" Value="Return">1</Publish> </Control> <!-- 其余控件逻辑完全和默认MsiRMFilesInUse.wxs保持一致即可 --> </Dialog> </UI>
3. 配置本地化字符串
在对应语言的.wxl本地化文件中添加你自定义的字符串即可,示例:
<!-- 中文简体.wxl文件 --> <WixLocalization Culture="zh-CN" xmlns="http://schemas.microsoft.com/wix/2006/localization"> <String Id="CustomRMInUseMessage">以下应用程序正在使用需要更新的文件,请关闭程序后继续安装。</String> <String Id="InstallerTitle">安装程序</String> <String Id="Ok">确定</String> </WixLocalization>
按照以上步骤配置,既不会出现属性重复报错,也不会出现对话框不弹出的问题,同时可以实现完全自定义的本地化内容。
内容的提问来源于stack exchange,提问作者Ashish Agarwal
相关产品推荐
相关产品推荐

