3

转向 WiX 3.6,我正在尝试利用刻录功能来简化所需部分的潜在下载/安装,例如特定的 VC++ 运行时。

我从一些“test.wxs”开始,见下文,这对于candle.exe来说是可以的:

$ candle test.wxs
Windows Installer Xml Compiler version 3.6.3303.0
Copyright (C) Outercurve Foundation. All rights reserved.

test.wxs

但是 light.exe 对此感到窒息:

$ light test.wixobj -ext WixBalExtension
Windows Installer Xml Linker version 3.6.3303.0
Copyright (C) Outercurve Foundation. All rights reserved.

light.exe : error LGHT0103 : The system cannot find the file '' with type ''.

有人可以帮助解决这个(相当神秘的)错误消息吗?

它似乎与 RemotePayload 有关,因为带有本地文件的修改版本可以正常工作。但是,如果需要,我想节省包大小并将下载保留在目标机器上。

“test.wxs”的完整内容是:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Bundle Version="1.0.0.0" 
            UpgradeCode="e349236d-6638-48c5-8d8b-db47682b9aeb">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
        <Chain>
            <!-- C++ Runtime -->
            <ExePackage Name="vcredist_x64.exe"
                        DownloadUrl="http://www.microsoft.com/en-us/download/confirmation.aspx?id=2092" >
                <RemotePayload CertificatePublicKey="F321408E7C51F8544B98E517D76A8334052E26E8" 
                               CertificateThumbprint="D57FAC60F1A8D34877AEB350E83F46F6EFC9E5F1" 
                               Description="Microsoft Visual C++ 2008 Redistributable Setup" 
                               Hash="13674C43652B941DAFD2049989AFCE63CB7C517B" 
                               ProductName="Microsoft Visual C++ 2008 Redistributable" 
                               Size="4961800" 
                               Version="9.0.30729.17" />
            </ExePackage>
        </Chain>
    </Bundle>
</Wix> 
4

3 回答 3

4

我自己的问题的部分答案:如果我将属性 Compressed="no" 添加到 ExePackage 元素,错误消息就会消失。

关于“压缩”属性的文档说:“包有效负载应该嵌入容器中还是作为外部有效负载保留”,其值可以是“是”、“否”或“默认”。

使用“是”或“默认”会触发错误消息。使用“否”不会。

于 2013-03-06T07:25:55.810 回答
2

我在使用另一个包(.NET 框架)和 Wix 3.7 时遇到了同样的问题。我使用 Wix 源代码找到合适的包名称和注册表项进行测试,然后将相关位粘贴到我的安装程序中。然后,我故意设置 'Compressed="yes"' 因为我想将文件嵌入到我的安装程序中,而不是下载它。

此邮件列表线程中发布了与您类似的报告:

Benjamin Mayrargue:如果一个 ExePackage 有一个 DownloadUrl 并且 Compressed 设置为 yes,则灯失败并出现错误 LGHT0103:系统找不到类型为 '' 的文件 ''。

Markus Wehrle:好的,我明白了。如果您想将 ExePackage 压缩到 bootstrapper.exe (compressed="yes") 中,您需要使用“Source”属性指定它。因为它会在编译期间被压缩到你的 boostrapper 中,所以你不能声明一个 DownloadUrl。如果您指定compressed="no",您的ExePackage 会在安装boostrapper 期间从DownloadUrl 下载。

Rob Mensching:更具体地说,您不能在 ExePackage 元素上同时使用 RemotePayload 元素和 Compressed='yes'。这没有意义,这里的错误是编译器没有在这里给你一条错误消息。

所以是的,您已经正确地确定了问题的相同解决方法。

顺便说一句,该Compressed属性指定“包有效负载应嵌入容器中还是作为外部有效负载保留”。该外部负载可以是RemotePayload磁盘上的一个文件或另一个文件,但典型的设置是单个引导加载程序,其中嵌入了所有资源。

使用yesCompression 属性将允许安装您的应用程序和 VC++ 运行时,即使用户的 Internet 连接速度较慢或不存在。从您的安装程序中删除DownloadUrland RemotePayload,并将它们替换为Compressed="yes"如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle Version="1.0.0.0"
          UpgradeCode="e349236d-6638-48c5-8d8b-db47682b9aeb">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
    <Chain>
      <!-- C++ Runtime -->
      <ExePackage Name="vcredist_x64.exe"
                  Compressed="yes">
      </ExePackage>
    </Chain>
  </Bundle>
</Wix>

然后下载 vcredist_x64.exe 文件(您自己下载一次)并将其放在您的 test.wxs 文件旁边。如果您希望它位于不同的位置,请调整“名称”。请注意,这会将生成的引导程序的大小增加大约 vcredist_x64.exe 的大小,因此如果您的用户将下载您的安装程序,这不是一个好主意。

于 2013-07-18T18:17:03.227 回答
0

在我的情况下,由于文件名/目录路径超过 255 个字符而引发了错误。该文件存在但编译器声明该文件不存在。

于 2016-09-22T02:58:32.463 回答