学无先后达者为师!
不忘初心,砥砺前行。

Windows 7 SP 1 部署 .NET 6 Desktop Runtime 桌面运行时会遇到的问题

根据微软的官方文档:如何在 Windows 上安装 .NET ,Windows 7 PS 1 是可以支持部署 .NET 6 运行环境的,只是这个操作有些麻烦。

依赖项

如果要在 Windows 7 SP 1 上安装 .NET SDK 或运行时,则需要其他依赖项:

可能会遇到的问题

1、安装无反应

如果遇到安装 Visual C++ 无反应的情况,有可能是 Windows Installer 服务未开启。在服务管理中将禁用的 Windows Installer 服务开启即可。

2、KB3063858 补丁安装失败

这种失败有两种可能:

1、Windows Update 服务未开启,尝试开启该服务后再试。

2、计算机上已经安装 KB2533623 。在某些已经部署了 KB2533623 补丁的计算机上替代更新 KB3063858 无法正常安装,会提示不适用。这种情况直接跳过这个安装即可。

如何检测是否已经安装成功

启动“命令提示符”,输入 dotnet --info ,看到输出中包含以下字符则表示安装成功:

Microsoft.WindowsDesktop.App 6.0.0

为何在 Windows 7 系统需要打补丁

针对这个问题,林德熙大佬给出了详细的解释,参考:探索 dotnet core 为何在 Windows7 系统需要补丁的原因-林德熙 。简单来说,这和 Windows 7 在 10年前更新的 Kernel32.dll 有关。较旧的版本中缺少 .NET 所需的一个方法,需要更新后才能使用。

KB3063858 补丁是必要的吗?

根据林德熙大佬的文章, KB3063858 不是必要的。只要客户操作系统的 Kernel32.dll 已经更新,则 .NET 就可以正常运行。推荐使用以下方法根据 Kernel32.dll 中是否包含特定函数来判断是否需要安装 KB3063858 补丁:

using PInvoke;
using System;

namespace AddDllDirectoryDetectCs
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var hModule = Kernel32.LoadLibrary("Kernel32.dll"))
            {
                if (!hModule.IsInvalid)
                {
                    IntPtr hFarProc = Kernel32.GetProcAddress(hModule, "AddDllDirectory");
                    if (hFarProc != IntPtr.Zero)
                    {
                        Console.WriteLine("Either running on Win8+, or KB2533623 is installed");
                    }
                    else
                    {
                        Console.Write("Likely running on Win7 or older OS, and KB2533623 is not installed");
                    }
                }
            }

            // 以下是判断 Universal C Runtime 的逻辑,可以忽略
            using (var hModule = Kernel32.LoadLibraryEx("UCRTBASE.dll", IntPtr.Zero, Kernel32.LoadLibraryExFlags.LOAD_LIBRARY_SEARCH_SYSTEM32))
            {
                if (!hModule.IsInvalid)
                {
                    Console.WriteLine("UCRT is available - Either running on Win10+ or KB2999226 is installed");
                }
                else
                {
                    Console.WriteLine("UCRT is not available - Likely running on OS older than Win10 and KB2999226 is not installed");
                }
            }
        }
    }
}

以上代码由 WPF 框架官方开发 Vatsan Madhavan 大佬提供,请看 vatsan-madhavan/checknetcoreprereqs: Helper utility to check .NET Core Prerequisites on Windows systems

赞(6) 打赏
未经允许不得转载:码农很忙 » Windows 7 SP 1 部署 .NET 6 Desktop Runtime 桌面运行时会遇到的问题

评论 1

  1. #1

    没补丁net core 代码根本没法执行如何能运行c# 判断,难道用老版本

    176个月前 (05-17)

给作者买杯咖啡

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册