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