WiX:更改MsiExec.exe错误消息(不是Windows Installer错误消息)

时间:2014-10-01 22:14:35

标签: wix windows-installer msiexec

有没有办法更改MsiExec在WiX中提供的错误消息? 我的目标是自定义当用户尝试安装补丁而不安装目标产品时显示的消息。

我尝试过添加

<Error Id="1642">You must install my product before installing this patch.</Error>

到UI部分,但它似乎无法正常工作。

我怀疑Windows Installer errorsMsiExec errors之间存在很大差异。

有没有人这样做过?

1 个答案:

答案 0 :(得分:0)

您无法覆盖MsiExec的文本。您只能覆盖MSI表中的某些消息&#34;错误&#34;和#34; ActionText&#34;,后者用于显示进度条的安装过程中的消息。

最重要的是,&#34;错误&#34; table是内部编号,与返回错误代码无关:

使用WiX,您可以覆盖表格内容&#34;错误&#34;但是你可以在你的链接或示例msi文件中看到,特别是编号是一个自己的编号,与返回代码(0,1603,3010,1642,...)无关,并且它们的消息被输出。 我认为,大多数这些错误消息都是针对日志文件中的输出,但我认为,它们也会在对话框中显示,必须尝试一下。

对于返回错误代码1642,相应的文本不在该表中。有没有补丁相关的错误消息。例如,1328,但它们适用于其他场景。

但通常你不会让用户通过双击或自己键入msiexec命令来启动,对吗? 相反,有一个批处理/脚本/ setup.exe或安装程序服务执行此操作。

你必须包装消息。许多安装执行此操作并开始安装本身静默,例如用&#34; msiexec /quiet&#34;或&#34; msiexec /qn&#34;

简化的批处理示例:

call msiexec /i "c:\mypath\mysetup.msi" /qn /L*v "c:\mylog.log"
SET SetupSuccess=%ERRORLEVEL%
if '%SetupSuccess%' EQU '0' echo Yes, setup successful.
if '%SetupSuccess%' EQU '1642' (
   echo.
   echo "You must install my product before installing this patch."
)

(当然,对于结构化的if / else更好,但它取决于你想给自己留言的返回代码。)