【问题标题】:WIX property value substitution and CAQuietExecWIX 属性值替换和 CAQuietExec
【发布时间】:2010-01-15 05:42:43
【问题描述】:

到目前为止,我并不认为 WIX 是我最喜欢的最直观、最易于使用的语言/系统。

我创建了一个自定义对话框,输入了数据,并查看了安装日志中的值。

MSI (c) (C8:A4) [14:42:37:137]: PROPERTY CHANGE: Modifying VARRADIOBUTTONENVIRONMENT property. Its current value is 'Dev'. Its new value: 'QA'.
MSI (c) (C8:A4) [14:42:41:448]: PROPERTY CHANGE: Modifying VARTEXTSETTINGSFILENAME property. Its current value is 'C:\Path\SettingsFileGenerator.xml'. Its new value: 'Test1234.txt'.

稍后,当需要使用该值时,我看到了这个:

Action ended 14:42:43: InstallFinalize. Return value 1.
MSI (s) (BC:F8) [14:42:43:676]: Doing action: QtExec1
Action 14:42:43: QtExec1. 
Action start 14:42:43: QtExec1.
MSI (s) (BC:F4) [14:42:43:682]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIC4A7.tmp, Entrypoint: CAQuietExec
MSI (s) (BC!BC) [14:42:43:690]: PROPERTY CHANGE: Deleting QtExecCmdLine property. Its current value is '"[INSTALLLOCATION]XmlPreprocess.exe /i:web.config /e:[VARRADIOBUTTONENVIRONMENT] "'.
CAQuietExec:  Error 0x8007007b: Command failed to execute.
CAQuietExec:  Error 0x8007007b: CAQuietExec Failed
Action ended 14:42:43: QtExec1. Return value 3.
Action ended 14:42:43: INSTALL. Return value 3.
Property(S): StartIIS7ConfigTransaction = ScaConfigureIIs

最后,当它转储所有属性时,它会显示:

属性:VARRADIOBUTTONENVIRONMENT = QA 属性(S):VARTEXTSETTINGSFILENAME = Test1234.txt 属性(S):VerifyCurrentPropValueOfEnv = [VARRADIOBUTTONENVIRONMENT]

这是我的代码片段。我刚刚将属性 ID 更改为全大写,并根据我看到的另一篇文章添加了 secure="yes"。我尝试过使用和不使用 Secure="yes"。

        <Property Id="VARRADIOBUTTONENVIRONMENT" Secure="yes">Dev</Property>
        <Property Id="VARTEXTSETTINGSFILENAME" Secure="yes">C:\Path\SettingsFileGenerator.xml</Property>

        ...then later... 

                <Property Id="VerifyCurrentPropValueOfEnv" Value="[VARRADIOBUTTONENVIRONMENT]"/>
        <Property Id="QtExecCmdLine" Value="&quot;[INSTALLLOCATION]XmlPreprocess.exe /i:web.config /e:[VARRADIOBUTTONENVIRONMENT] &quot;"/>
        <CustomAction Id="QtExec1" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="check"/>


<InstallExecuteSequence>
<Custom Action="QtExec1" After="InstallFinalize"><![CDATA[NOT(Installed)]]></Custom>
</InstallExecuteSequence>

在安装结束时,我看到 XmlPreProcess.exe 安装在安装目录中。

问题:

  1. 在获取要替换的值时我做错了什么吗?

  2. 我正在使用 CAQuietExec,因为我被告知它会记录更好的错误并将命令窗口的输出回显到安装日志。我真的不在乎看不到命令​​窗口。我不确定如何找出这意味着什么: “CAQuietExec:错误 0x8007007b:命令执行失败。”。我不知道这是试图调用 XmlPreprocess.exe 的 WIX 错误,还是它进入 XmlPreprocess 然后抛出错误。

谢谢,

尼尔·沃尔特斯

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    查看日志提取我想我可以看到问题,你已经引用了整个命令行,试试这个:

    <Property Id="QtExecCmdLine" Value="&quot;[INSTALLLOCATION]XmlPreprocess.exe&quot; /i:&quot;[INSTALLLOCATION]web.config&quot; /e:[VARRADIOBUTTONENVIRONMENT]"/>
    

    【讨论】:

    • 我想我已经厌倦了我的几十个排列之一,但现在会再试一次。谢谢!
    • 谢谢,它运行起来了!现在如何确定我是否将正确的变量传递给它?
    • @Neal,您应该能够分析日志并从那里获取 :)
    • @saschabeaumont anaylizing msi log 对我来说是最神秘的 :)
    • @sergdev 您可能会发现wilogutl.exe 很有帮助。它是 Windows SDK 的一部分,如果您不确定要查找的内容,可以让分析变得更加容易
    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多