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();
}
}