LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#强制开启Windows系统远程桌面服务,取消仅允许运行使用网络级别身份验证(NLA)的远程桌面的计算机连接限制

admin
2025年3月7日 12:14 本文热度 356

以下是实现强制开启Windows 远程桌面服务并禁用网络级别身份验证(NLA)的C#代码示例:

using System;

using Microsoft.Win32;

using System.ServiceProcess;

using System.Diagnostics;

using System.Security.Principal;


class EnableRemoteDesktop

{

    static void Main(string[] args)

    {

        if (!IsAdministrator())

        {

            Console.WriteLine("请以管理员权限运行此程序。");

            return;

        }


        try

        {

            ConfigureTermService();

            EnableRdpThroughRegistry();

            DisableNlaThroughRegistry();

            RestartTermService();

            

            Console.WriteLine("远程桌面已成功启用,NLA限制已取消!");

        }

        catch (Exception ex)

        {

            Console.WriteLine($"操作失败: {ex.Message}");

        }

    }


    static bool IsAdministrator()

    {

        var identity = WindowsIdentity.GetCurrent();

        var principal = new WindowsPrincipal(identity);

        return principal.IsInRole(WindowsBuiltInRole.Administrator);

    }


    static void ConfigureTermService()

    {

        try

        {

            // 设置服务为自动启动

            ProcessStartInfo scConfig = new ProcessStartInfo

            {

                FileName = "sc",

                Arguments = "config TermService start= auto",

                UseShellExecute = false,

                CreateNoWindow = true

            };

            Process.Start(scConfig)?.WaitForExit();


            // 确保服务运行

            using (ServiceController service = new ServiceController("TermService"))

            {

                if (service.Status != ServiceControllerStatus.Running)

                {

                    service.Start();

                    service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(30));

                }

            }

        }

        catch (Exception ex)

        {

            throw new Exception($"配置远程桌面服务失败: {ex.Message}");

        }

    }


    static void EnableRdpThroughRegistry()

    {

        try

        {

            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(

                @"SYSTEM\CurrentControlSet\Control\Terminal Server", true))

            {

                key?.SetValue("fDenyTSConnections", 0, RegistryValueKind.DWord);

            }

        }

        catch (Exception ex)

        {

            throw new Exception($"修改注册表启用RDP失败: {ex.Message}");

        }

    }


    static void DisableNlaThroughRegistry()

    {

        try

        {

            using (RegistryKey rdpKey = Registry.LocalMachine.OpenSubKey(

                @"SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp", true))

            {

                rdpKey?.SetValue("UserAuthentication", 0, RegistryValueKind.DWord);

            }

        }

        catch (Exception ex)

        {

            throw new Exception($"禁用NLA失败: {ex.Message}");

        }

    }


    static void RestartTermService()

    {

        try

        {

            using (ServiceController service = new ServiceController("TermService"))

            {

                if (service.Status == ServiceControllerStatus.Running)

                {

                    service.Stop();

                    service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(30));

                }

                service.Start();

                service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(30));

            }

        }

        catch (Exception ex)

        {

            throw new Exception($"重启服务失败: {ex.Message}");

        }

    }

}

使用说明:

  1. 以管理员身份运行:

    • 在Visual Studio中创建项目时,需在app.manifest中添加管理员权限请求:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
  1. 关键操作说明:

    • fDenyTSConnections设为0启用远程桌面

    • UserAuthentication设为0禁用NLA

    • 服务配置: 将TermService服务设置为自动启动并确保运行状态

    • 注册表修改:

    • 服务重启: 确保注册表修改生效

  2. 附加建议(可选):

// 添加防火墙规则(如果需要)

static void AddFirewallRule()

{

    try

    {

        ProcessStartInfo firewall = new ProcessStartInfo

        {

            FileName = "netsh",

            Arguments = "advfirewall firewall add rule name=\"Remote Desktop\" dir=in protocol=TCP localport=3389 action=allow",

            UseShellExecute = false,

            CreateNoWindow = true

        };

        Process.Start(firewall)?.WaitForExit();

    }

    catch (Exception ex)

    {

        Console.WriteLine($"防火墙规则添加失败: {ex.Message}");

    }

}

注意事项:

  • 修改注册表前建议备份

  • 禁用NLA会降低安全性,建议仅在可信网络环境中使用

  • 部分服务器版本可能需要额外配置

  • 确保3389端口在防火墙中开放(代码中已提供示例)


相关文档:

C#强制关闭Windows Server系统服务器远程桌面服务方法[3]
  http://29680.oa22.cn


该文章在 2025/3/7 16:56:06 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved