从永久链接 URL 下载文件,而不是直接的 exe url

时间:2021-05-25 23:11:32

标签: asp.net inno-setup pascalscript

所以我使用 InnoSetup 6,它本身支持在安装过程中从 Internet 下载文件。我已经想出了从这个线程 Inno Setup: Install file from Internet

给出的直接链接下载文件

但是,我终生无法弄清楚如何下载给定永久链接 URL 的文件的最新版本。我的具体示例是下载 Microsoft Hosting 包。 https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer

转到此页面会自动下载最新的软件包。 Inno 不喜欢这个链接(或者我不知道如何让 Inno 使用它),因为它没有指向直接文件。如果我使用直接链接 (https://download.visualstudio.microsoft.com/download/pr/24847c36-9f3a-40c1-8e3f-4389d954086d/0e8ae4f4a8e604a6575702819334d703/dotnet-hosting-5.0.6-win.exe),原因很明显。

我想总是下载最新的,但我不知道如何做到这一点。有什么建议么? 添加正在使用的超级基本代码...

DownloadPage.Clear;
DownloadPage.Add('https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer', 'dotnet-hosting.exe', '');
DownloadPage.Show;

2 个答案:

答案 0 :(得分:2)

您必须检索 HTML 页面,在 HTML 代码中找到 URL 并在下载代码中使用它。

Inno Setup - HTTP request - Get www/web content

这将是非常不可靠的。 Microsoft 可以随时更改 HTML。


您最好设置自己的网页(网络服务),该网页将提供指向安装程序的最新链接。该网页甚至可以执行我建议的操作:从 Microsoft 的下载页面检索 URL。如果 Microsoft 更改了 HTML,您可以随时修复您的网页。您不能使用安装程序做什么。

答案 1 :(得分:1)

没有意识到你在这里问了两个不同的问题。那是因为这些“永久链接”并不是真正的永久链接,而是重定向到某个动态资源,其中包含指向您要查找的内容的链接。

因此,首先,解决 Microsoft 的“永久链接”问题,您需要意识到在幕后您正在访问一个 URL,该 URL 重定向到将指向最新页面的某个页面。然后在幕后,该页面调用 JavaScript 函数,如果您通过 WEB 浏览器访问,以下载安装程序。请注意,指向的页面和调用安装程序的代码WILL最终都会改变。事实上,当人们尝试直接下载时,代码本身会记录一个“警告”:

如果您查看源代码,您会看到:

    <script>
        $(function () {
            recordDownload('.NET', 'runtime-aspnetcore-5.0.6-windows-hosting-bundle-installer');
            window.open("https://download.visualstudio.microsoft.com/download/pr/24847c36-9f3a-40c1-8e3f-4389d954086d/0e8ae4f4a8e604a6575702819334d703/dotnet-hosting-5.0.6-win.exe", "_self");
        });

        function recordManualDownload() {
            ga("send", "event", "Download.Warning", "Direct Link Used", "runtime-aspnetcore-5.0.6-windows-hosting-bundle-installer");
        }
    </script>

因此,您可以从此页面下载 HTML 并使用一些正则表达式来获取直接下载链接,但请注意,每次 Microsoft 发布新版本时,该链接都会更改。此外,WHEN(不是如果,而是何时)MS 决定重新命名这整个过程可能会中断。因此,您在这里可以做的最好的事情是尝试下载 html 并尝试从此“永久链接”解析下载 URL

作为替代。您可以将最新的 DotNet powershell install script 下载为 described here

如果可能,直接执行该脚本。如果没有,请查看安装脚本中的 Get-AkaMSDownloadLink 函数以了解它如何构建 url 以获取最新版本。与尝试从某些任意 HTML 代码下载相比,使用该构建和使用该 URL 可能会更好地为您服务。

现在,关于第二个问题,您可能没有意识到您要问的是如何为任何随机安装程序自动执行此操作。答案是你不能。有些可能有一个直接指向最新的永久链接,但你总是会找到像微软这样的案例。正如@martin-prikryl 所建议的那样,您最好可以对某些服务中的某些链接进行硬编码,并在中断时更新这些服务中的链接。