using System;
using System.ServiceProcess;
using System.Diagnostics;
using System.Security.Principal;
public class RemoteDesktopServiceController
{
    public static void StopRemoteDesktopService()
    {
        if (!IsAdministrator())
        {
            Console.WriteLine("请以管理员身份运行此程序。");
            return;
        }
        try
        {
            using (ServiceController service = new ServiceController("TermService"))
            {
                Console.WriteLine($"当前服务状态: {service.Status}");
                if (service.Status == ServiceControllerStatus.Running)
                {
                    Console.WriteLine("正在停止远程桌面服务...");
                    service.Stop();
                    service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(30));
                    Console.WriteLine("服务已成功停止。");
                }
                else
                {
                    Console.WriteLine("远程桌面服务未运行。");
                }
            }
        }
        catch (InvalidOperationException ex)
        {
            Console.WriteLine($"操作失败:{ex.Message}");
        }
        catch (System.ServiceProcess.TimeoutException)
        {
            Console.WriteLine("停止服务超时,尝试强制终止...");
            ForceStopServiceViaCMD();
        }
    }
    // 通过命令行强制停止服务(sc stop)
    private static void ForceStopServiceViaCMD()
    {
        try
        {
            ProcessStartInfo psi = new ProcessStartInfo
            {
                FileName = "sc",
                Arguments = "stop TermService",
                WindowStyle = ProcessWindowStyle.Hidden,
                UseShellExecute = true,
                Verb = "runas" // 请求管理员权限
            };
            Process.Start(psi)?.WaitForExit();
            Console.WriteLine("已发送强制停止命令。");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"强制停止失败:{ex.Message}");
        }
    }
    // 检查当前是否以管理员身份运行
    private static bool IsAdministrator()
    {
        WindowsIdentity identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    public static void Main()
    {
        StopRemoteDesktopService();
        Console.ReadKey();
    }
}