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("請(qǐng)以管理員權(quán)限運(yùn)行此程序。");
return;
}
try
{
ConfigureTermService();
EnableRdpThroughRegistry();
DisableNlaThroughRegistry();
RestartTermService();
Console.WriteLine("遠(yuǎn)程桌面已成功啟用,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
{
// 設(shè)置服務(wù)為自動(dòng)啟動(dòng)
ProcessStartInfo scConfig = new ProcessStartInfo
{
FileName = "sc",
Arguments = "config TermService start= auto",
UseShellExecute = false,
CreateNoWindow = true
};
Process.Start(scConfig)?.WaitForExit();
// 確保服務(wù)運(yùn)行
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($"配置遠(yuǎn)程桌面服務(wù)失敗: {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($"修改注冊(cè)表啟用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($"重啟服務(wù)失敗: {ex.Message}");
}
}
}