WiX ExePackage:无法向URL发送请求

时间:2013-03-07 08:46:32

标签: download wix burn

使用WiX Burn v3.7.1224,我无法通过ExePackage获取远程有效负载。我通常使用类似的ExePackage元素成功,因此我认为问题可能与我尝试下载的特定URL有关。

此特定“exe网址”为http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe

准确地说:交互式页面位于http://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-setup-3.02.02.exe并点击下载锚“似乎”,导致上面列出的直接“exe URL”。我说“似乎”因为我不得不深入查看页面源代码以找出最终的“exe URL”,这可能是一个问题。

以下是感兴趣的WiX片段:

<Fragment>
    <util:RegistrySearch Id="TesseractLookup"
                         Variable="TESSERACT_REGVALUE"
                         Root="HKLM"
                         Key="SOFTWARE\Tesseract-OCR" 
                         Value="CurrentVersion" />   

    <PackageGroup Id="Tesseract">
        <ExePackage Compressed="no" 
                    PerMachine="yes" 
                    Permanent="yes" 
                    Vital="yes" 
                    Name="redist\tesseract-ocr-setup-3.02.02.exe"                    
                    InstallCondition="NOT TESSERACT_REGVALUE"
                    DetectCondition="TESSERACT_REGVALUE"
                    DownloadUrl="http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe">

            <RemotePayload Description="Tesseract-OCR - open source OCR engine" 
                           Hash="35C61604AAAC961C24CD28F959566B2E39244541" 
                           ProductName="Tesseract-OCR" 
                           Size="13525781"
                           Version="3.02.02.0" />
        </ExePackage>
    </PackageGroup>        
</Fragment>

我成功使用了我尝试的浏览器(Firefox和Internet Explorer)以及基本的“wget”命令,只需几秒钟。但是Burn失败了。 所有都提供了相同的“exe URL”。 我甚至尝试使用禁用防火墙和防病毒软件以防万一,但无济于事。

你对可能发生的事情有任何暗示吗?

以下是安装日志中的相关行:

[27F8:1FE8][2013-03-07T08:36:46]w343: Prompt for source of package: tesseract_ocr_setup_3.02.02.exe, payload: tesseract_ocr_setup_3.02.02.exe, path: D:\soft\audiveris\dist\redist\tesseract-ocr-setup-3.02.02.exe
[27F8:1FE8][2013-03-07T08:36:46]i338: Acquiring package: tesseract_ocr_setup_3.02.02.exe, payload: tesseract_ocr_setup_3.02.02.exe, download from: http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe
[27F8:1FE8][2013-03-07T08:36:47]e000: Error 0x80070002: Failed to send request to URL: http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe
[27F8:1FE8][2013-03-07T08:36:47]e000: Error 0x80070002: Failed to connect to URL: http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe
[27F8:1FE8][2013-03-07T08:36:47]e000: Error 0x80070002: Failed to get size and time for URL: http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe
[27F8:1FE8][2013-03-07T08:36:47]e000: Error 0x80070002: Failed attempt to download URL: 'http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe' to: 'C:\Users\herve\AppData\Local\Temp\{7715fbb6-5bc5-442f-86a0-655fa082bd7d}\tesseract_ocr_setup_3.02.02.exe'
[27F8:1FE8][2013-03-07T08:36:47]e000: Error 0x80070002: Failed to acquire payload from: 'http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe' to working path: 'C:\Users\herve\AppData\Local\Temp\{7715fbb6-5bc5-442f-86a0-655fa082bd7d}\tesseract_ocr_setup_3.02.02.exe'

1 个答案:

答案 0 :(得分:1)

按照Rob的建议(谢谢!),我安装并调查了Fiddler。 HTTP请求实际上是HEAD请求,服务器返回404。

我从另一个网站上撤下了另一个软件,仍然使用Burn,以便发现Fiddler应该看到的内容:这是一个HEAD请求,然后是GET请求。 这是有道理的:据我所知,HEAD就像一个GET,但没有返回任何内容,主要用于在启动实际转移之前进行调整。

然后,回到Tesseract网站,我向Fiddler伪造了一个全新的HEAD请求如下:

HEAD http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe HTTP/1.1
Accept: */*
User-Agent: Burn
Host: tesseract-ocr.googlecode.com
Connection: Keep-Alive
Pragma: no-cache

响应是:“HTTP / 1.1 404 Not Found”(就像对初始Burn请求的响应一样)

然后我伪造了一个GET请求(只需用“GET”替换“HEAD”):

GET http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.02.02.exe HTTP/1.1
Accept: */*
User-Agent: Burn
Host: tesseract-ocr.googlecode.com
Connection: Keep-Alive
Pragma: no-cache

而这一次,我得到了:“HTTP / 1.1 200 OK”,接着是13525781字节的内容...... BINGO!

现在,我们离开了:

  1. 服务器如何响应404 HEAD请求但正确响应类似的GET请求?

  2. 如果Tesseract Google网站的HEAD请求出现问题,是否有办法告诉Burn跳过HEAD请求并直接处理GET请求?

  3. 还有其他修复吗?