2013-03-04 38 views
4

轉到WiX 3.6,我試圖利用刻錄功能來緩解潛在的下載/安裝所需的部分,如特定的VC++運行時。RemotePayload:系統無法找到類型爲''的文件''

我開始與小隻是一些 「test.wxs」,見下文,這是candle.exe OK:

$ 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> 

回答

5

部分答案我自己的問題: 如果我添加壓縮=「不」 ExePackage元素的屬性的錯誤信息消失。

有關「壓縮」屬性的說明文件說:「包裝有效載荷是應該嵌入容器還是作爲外部有效載荷」,其值可以是「是」,「否」或「默認」。

使用「是」或「默認」觸發錯誤消息。使用「否」不會。

2

我對另一個包(.NET框架)和Wix 3.7有同樣的問題。我使用Wix源代碼來查找適當的軟件包名稱和註冊表項以進行測試,然後將相關位粘貼到我的安裝程序中。然後,我故意設置'Compressed ='yes'',因爲我想將文件嵌入到安裝程序中而不是下載。

有類似你們的報告張貼在this mailing list thread

本傑明Mayrargue:如果ExePackage有DownloadUrl和壓縮設置爲yes,光失敗,錯誤LGHT0103:系統不能找到類型爲''的文件''。

Markus Wehrle:好的,我明白了。如果您想將ExePackage壓縮到您的bootstrapper.exe(compressed =「yes」),則需要使用「Source」屬性指定它。因爲它會在編譯期間壓縮到你的boostrapper中,所以你不能聲明一個DownloadUrl。如果您指定壓縮=「否」,則在安裝boostrapper期間,您的ExePackage將從DownloadUrl下載。

Rob Mensching:更具體地說,您不能在ExePackage元素上一起使用RemotePayload元素和Compressed ='yes'。這沒有任何意義,這裏的錯誤是編譯器在這裏沒有給出錯誤信息。

所以,是的,你已經正確地找出了同樣的問題解決方案。

順便說一句,Compressed屬性指定'包裹有效載荷是應該嵌入容器還是留作外部有效載荷。'該外部有效載荷可以是RemotePayload或磁盤上的其他文件,但典型設置是一個嵌入了所有資源的單個引導加載程序。

對壓縮屬性使用yes將允許安裝應用程序和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的大小,因此如果您的用戶將下載安裝程序,這不是一個好主意。

0

在我的情況下,錯誤是由於文件名/目錄路徑超過255個字符而引發的。該文件存在但編譯器指出該文件不存在。

相關問題