如何绕过NSIS下载错误“连接到主机”

时间:2010-11-27 22:42:16

标签: download nsis

所以我正在尝试下载并安装PySVN作为我程序堆栈的一部分。我正在下载而不是包含,但下载失败的原因不明。这是代码:

!define PYSVN_FILE "py25-pysvn-svn161-1.7.0-1177.exe"   
!define PYSVN_DOWNLOAD_LOC "http://pysvn.tigris.org/files/documents/1233/45661/py25-pysvn-svn161-1.7.0-1177.exe"
${If} $pythonVersion == "2.5"
     NSISdl::download "${PYSVN_DOWNLOAD_LOC}" ${PYSVN_FILE}
${Else}
     NSISdl::download "${PYSVN2_DOWNLOAD_LOC}" ${PYSVN_FILE}
${EndIf}

我正在尝试下载$ {PYSVN_DOWNLOAD_LOC} = http://pysvn.tigris.org/files/documents/1233/45661/py25-pysvn-svn161-1.7.0-1177.exe

该文件显然可以从Web浏览器下载,但NSIS在尝试连接时会抛出“连接到主机”错误。我试过给它一个很大的超时值。这是代理问题吗?如何在不在安装程序中包含文件的情况下解决这个问题?

修改

感谢Anders我编写了如下代码:

  ${If} $pythonVersion == "2.5"
        inetc::get "${PYSVN_DOWNLOAD_LOC}" "${PYSVN_FILE}" /END
  ${Else}
        inetc::get "${PYSVN2_DOWNLOAD_LOC}" "${PYSVN_FILE}" /END
  ${EndIf}

现在给我一个“302(重定向)”错误。文件和下载位置没有改变。

2 个答案:

答案 0 :(得分:2)

NSISdl使用普通套接字,如果服务器进行重定向和cookie技巧/跟踪,则会失败,请尝试INetC,它使用更高级别的WinInet API

答案 1 :(得分:0)

inetc::get /NOCANCEL /RESUME "" "http://file.blah" "$TEMP\Setup.exe"
    Pop $0
    StrCmp $0 "OK" dlok
    MessageBox MB_OK|MB_ICONEXCLAMATION "Error downloading. Click OK to abort installation." /SD IDOK
dlok:
    !insertmacro closeAllBrowsers
    ; install plugin
    ExecWait `$TEMP\Setup.exe`