NSIS Inetc get:我可以将下载的文件设置为变量吗?

NSIS Inetc get:我可以将下载的文件设置为变量吗?,nsis,Nsis,当我在那里添加了文件_1234.exe时,代码正在运行。但是文件名会更改,download.php会重定向到exe。因此,我希望有一个不需要指定文件名的代码,而不是有一个固定的文件名 是否可以用代码替换第一个文件_1234.exe以下载URL提供的任何文件,从而用运行(ExecShell)此下载文件的代码替换第二个文件_1234.exe??谢谢 代码本身如下所示: Section "File" inetc::get "http://example.com/download.php" "$plug

当我在那里添加了文件_1234.exe时,代码正在运行。但是文件名会更改,download.php会重定向到exe。因此,我希望有一个不需要指定文件名的代码,而不是有一个固定的文件名

是否可以用代码替换第一个文件_1234.exe以下载URL提供的任何文件,从而用运行(ExecShell)此下载文件的代码替换第二个文件_1234.exe??谢谢

代码本身如下所示:

Section "File"
inetc::get "http://example.com/download.php" "$pluginsdir\File_1234.exe"
Pop $0
DetailPrint "Result: $R0"
    ExecShell "" '"$pluginsdir\File_1234.exe"'
SectionEnd
如果您的“”返回要下载的文件的URL,则这是可能的。 我的意思是:download.php以文本(“”)的形式返回URL

1) 此文本与inetc一起下载到某个本地文件并读入变量。 2) 使用Inetc再次从URL(在变量中指定)下载文件作为结果.exe文件


您可以接受吗?

INetC没有将INTERNET\u标志\u NO\u AUTO\u重定向标志传递给WinInet的标志,因此当服务器返回30倍重定向代码时,无法执行head请求并找到位置

如果您可以修改download.php,在出现特殊参数时将最终URL作为小文本文件返回,那么您可以发出两个GET请求,第一个请求获取名称,第二个请求执行主下载:

Section

InitPluginsDir
StrCpy $0 "http://example.com/download.php?fileid=1234"
inetc::get /SILENT "$0&locationonly=1" "$PluginsDir\location.txt" /END
FileOpen $1 "$PluginsDir\location.txt" R
FileRead $1 $2
FileClose $1
StrLen $1 $2
loop:
    IntOp $1 $1 - 1
    StrCpy $3 $2 1 $1
    StrCmp $3 '/' 0 +4
        IntOp $1 $1 + 1
        StrCpy $3 $2 "" $1
        Goto +2
    StrCmp $3 "" 0 loop
StrCmp $3 "" nofilename
inetc::get "$0" "$PluginsDir\$3" /END
Goto done
nofilename:
MessageBox mb_iconstop "Unable to parse filename from $2"
done:

SectionEnd

本例假设将下载该文件,但只返回类似于

的URL。这是一个5年后的答案,旨在帮助那些可能想知道如何将inetc::get output转换为变量的人;) 显然,从那以后你找到了解决办法。。。无论如何:

inetc::get有一个很好的选项
/TOSTACK
,可以实现这一点

以下是您的示例:

!include LogicLib.nsh

Section "File"
inetc::get /TOSTACK "http://example.com/download.php" ""
Pop $0
DetailPrint "Result: $0"
${If} $0 == 'OK'
    Pop $0
    StrCpy $filename $0 
    inetc::get /TOSTACK "http://example.com/$filename" "$PluginsDir\$filename"
    Pop $0
    ${If} $0 == 'OK'
        ExecShell "" '"$pluginsdir\$filename"'
    ${Else}
        MessageBox MB_OK "Cannot download file $filename"
    ${EndIf}
${Else}
    MessageBox MB_OK "Cannot fetch filename to download"
${EndIf}

SectionEnd

是的,这可能是一个选项。你能分享一下吗,thanks@hasani这意味着修改服务器,首先下载一个包含最终URL的小文件,然后在本地解析字符串以查找文件名后可以下载该文件…任何链接或提示从何处开始都会很有帮助。。。在发布这个问题之前,我在谷歌上搜索了几个小时,浏览了所有nsis和inetc命令,但没有找到解决问题的方法kind@hasani它是您的服务器,您可以修改download.php吗?是的,我在共享主机上,但我可以在cpanel上做任何事情,并编辑phpHi,我遇到了以下问题:“如果您可以修改download.php,在出现特殊参数时,将最终URL作为一个小文本文件返回" .. 如何解决?谢谢@hasani您需要修改服务器上的php文件。是的,我理解,但我尝试了一些代码,但它没有做任何事情。。也许您可以告诉我应该将什么代码放入服务器上的php文件中?谢谢