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

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

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

以下是实现强制开启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