【问题标题】:Download a file from a permalink URL, and not a direct exe url从永久链接 URL 下载文件,而不是直接的 exe url
【发布时间】:2021-05-25 23:11:32
【问题描述】:

所以我使用的是 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;

【问题讨论】:

    标签: asp.net inno-setup pascalscript


    【解决方案1】:

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

    Inno Setup - HTTP request - Get www/web content

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


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

    【讨论】:

    • 似乎有点复杂,但下载页面的 URL 是一个永久链接,我认为 Microsoft 更改 HTML 的可能性较小。也许搜索并提取页面上的 DirectLink 不是一个坏选择。除非我得到任何其他建议,否则我可能会探索此选项并在获得任何解决方案时进行更新。谢谢你的建议。
    • “但下载页面的 URL 是永久链接,我认为 Microsoft 更改 HTML 的可能性较小” – 我在这里看不到连接。 – 我再次建议您为此创建自己的网页。该网页甚至可以执行我的建议:从下载页面检索 URL。如果 Microsoft 更改了 HTML,您可以随时修复您的网页。安装程序不能做什么。
    • ` Microsoft 更改 HTML 的可能性较小` 是一个绝对错误的说法,这来自在 MS 开发堆栈上拥有 20 多年经验的人。 Microsoft 会定期更改他们的 html,不仅会停止下载以支持最新最好的内容。
    • 事实上,人们对我望而却步,但整个 dotnet-core 事情很快就会成为过去。我愿意在两年内打赌 10,000 美元的 MS 品牌重塑核心,然后你所有的链接和对任何“核心”相关的引用都可能消失。
    【解决方案2】:

    没有意识到你在这里问了两个不同的问题。这是因为这些“永久链接”并不是真正的永久链接,而是重定向到一些动态资源,该资源具有指向您正在寻找的内容的链接。

    首先,解决微软的“永久链接”问题,您需要意识到在后台您访问的 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 并使用一些正则表达式来获取 directo 下载链接,但请注意,每次 Microsoft 发布新版本时,该链接都会更改。此外,WHEN(不是如果,而是何时)MS 决定重新命名这整个过程可能会中断。因此,您可以在这里做的最好的事情是尝试下载 html 并尝试从这个“永久链接”解析下载 URL

    作为替代。你可以下载最新的DotNet powershell install scriptdescribed here

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2023-01-10
      • 2019-09-15
      • 1970-01-01
      相关资源
      最近更新 更多