2014-10-01 150 views
0

有没有方法可以更改由Wii中的MsiExec给出的错误消息? 我的目标是自定义用户在未安装目标产品的情况下尝试安装修补程序时出现的消息。WiX:更改MsiExec.exe错误消息(不是Windows安装程序错误消息)

我曾尝试加入

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

的UI部分,但它似乎并没有工作。

我怀疑Windows Installer errorsMsiExec errors之间有很大的差异。

有没有人曾经这样做过?

回答

0

您不能覆盖MsiExec的文本。您只能覆盖MSI表中的一些消息“Error”和“ActionText”,后者用于显示进度条的安装过程中的消息。

最重要的是,在“错误”表中的编号是内部编号和无关具有返回错误代码:

随着维克斯可以覆盖表的内容“错误“但正如你可以在你的链接或例子msi文件中看到的那样,特别是编号是自己的编号,并且与返回码(0,1603,3010,1642,...)及其消息无关。我认为,这些错误消息中的大部分都是针对日志文件中的输出的,但我认为,它们也会在对话框中显示出来,所以必须尝试一下。

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

但通常你不会让用户通过双击或自己输入msiexec命令来启动,是吗? 取而代之的是这样做的批处理/脚本/ setup.exe或安装程序服务

在那里你必须包装消息。许多安装都是这样做的,并且开始安装本身,例如静音与“msiexec /quiet”或“msiexec /qn

简体批次例如:(结构化当然更好的if/else,但是这取决于你想给自己的消息,这些消息的返回码)

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." 
) 

+0

我确实有一个启动msiexec的可执行文件,但它以完整的UI运行,因此用户将看到错误消息。我想我可以在尝试安装修补程序之前检查目标产品是否存在。它似乎是多余的。 – chickenpie 2014-10-02 12:01:18

+1

Windows安装程序会在修补程序执行任何操作之前发现该错误。如果未安装目标产品,则Windows会处理该问题,而不是您。如果您用可执行文件打包补丁程序,首先看到您的产品代码是否已安装,那么您可以创建自己的消息。更进一步,看看安装的版本是否低于你的补丁版本,如果你想说它不适用(或已经安装)用你自己的话。 MsiGetProductInfo()和MsiApplyPatch() – PhilDW 2014-10-02 20:01:56

+0

是的,我同意PhilDW。这不是多余的,而是一个很好的检查方法。一个特定的测试功能(如果该补丁适用)是MsiDeterminePatchSequence()。我自己并没有使用它,但是在第二次阅读文档后,似乎没有那么不方便,因为在第一次阅读之后。 :-) – Philm 2014-10-03 14:15:08