从固定链接下载文件 URL,而不是直接 exe url

Download a file from a permalink URL, and not a direct exe url

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

直接 link 下载文件的方法

但是,我一辈子都弄不明白如何下载给定 permalink URL 的文件的最新版本。我的具体示例是下载 Microsoft Hosting 包。 https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer

转到此页面会自动下载最新的软件包。 Inno 不喜欢这个 link (或者我不知道如何让 Inno 使用它)因为它不指向直接文件。如果我使用直接的 link (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;

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

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


您最好设置自己的网页(网络服务),以便为您的安装程序提供最新的 link。该网页甚至可以执行我建议的操作:从 Microsoft 的下载页面检索 URL。如果 Microsoft 更改 HTML,您可以随时修复您的网页。安装程序无法执行的操作。

在没有意识到的情况下,您在这里问了两个不同的问题。那是因为这些“permalinks”并不是真正的 permalinks,而是重定向到一些具有 link 的动态资源。

所以首先,解决 Microsoft“permalink”,您需要意识到在后台您正在访问一个 URL,该 URL 重定向到某个指向最新的页面。然后在幕后,该页面调用 JavaScript 函数 IF YOU ACCESSING VIA A WEB BROWSER,以下载安装程序。请注意,指向的页面和调用安装程序的代码 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 并使用一些正则表达式来直接下载 link 但请注意,每次 Microsoft 发布新版本时 link 都会更改新版本。此外,WHEN(不是如果,而是何时)MS 决定更名,这整个过程可能会中断。所以你在这里能做的最好的就是尝试下载 html 并尝试从这个“permalink”

解析下载 URL

作为替代方案。你可以下载最新的 DotNet powershell install script as described here.

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

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