RemotePayload:系统找不到文件''with type''

时间:2013-03-04 15:58:44

标签: wix burn

转到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> 

3 个答案:

答案 0 :(得分:4)

对我自己的问题的部分回答: 如果我将属性Compressed =“no”添加到ExePackage元素,则错误消息将消失。

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

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

答案 1 :(得分:2)

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

this mailing list thread中发布了类似于您的报告:

  
    
      

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或另一个文件,但典型的设置是单个引导加载程序,其中嵌入了所有资源。

使用yes作为Compression属性将允许安装应用程序和VC ++运行时,即使用户的Internet连接速度很慢或不存在也是如此。从安装程序中删除DownloadUrlRemotePayload,并将其替换为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的大小,因此,如果您的用户将下载安装程序,则不是一个好主意。

答案 2 :(得分:0)

在我的情况下,错误被抛出,因为文件名/目录路径超过255个字符。该文件存在但编译器声明该文件不存在。