using System;
using System.Collections;
using System.ServiceProcess;
using System.Windows.Forms;
using System.Configuration.Install;
using System.Diagnostics;
namespace ServiceClient
{
class Windows
{
#region 检查服务存在的存在性
///
/// 检查服务存在的存在性
///
/// 服务名
/// 存在返回 true,否则返回 false;
public static bool isServiceIsExisted(string NameService)
{
ServiceController[] services = ServiceController.GetServices();
foreach (ServiceController s in services)
{
if (s.ServiceName.ToLower() == NameService.ToLower())
{
return true;
}
}
return false;
}
#endregion
#region 安装Windows服务
///
/// 安装Windows服务
///
/// 集合,当传递给 Install 方法时,stateSaver 参数指定的 IDictionary 应为空。
/// 程序文件路径
public static bool InstallmyService(IDictionary stateSaver, string filepath)
{
try
{
if (filepath == "")
{
return false;
}
AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
AssemblyInstaller1.UseNewContext = true;
AssemblyInstaller1.Path = filepath;
stateSaver.Clear();
AssemblyInstaller1.Install(stateSaver);
AssemblyInstaller1.Commit(stateSaver);
AssemblyInstaller1.Dispose();
return true;
}
catch
{
throw;
}
}
#endregion
#region 卸载Windows服务
///
/// 卸载Windows服务
///
/// 程序文件路径
public static bool UnInstallmyService(IDictionary stateSaver, string filepath)
{
try
{
if (filepath == "")
{
return false;
}
AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller();
AssemblyInstaller1.UseNewContext = true;
AssemblyInstaller1.Path = filepath;
AssemblyInstaller1.Uninstall(stateSaver);
AssemblyInstaller1.Dispose();
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
#region 检查Windows服务是否在运行
///
/// 检查Windows服务是否在运行
///
/// 程序的服务名
public static bool IsRunning(string name)
{
bool IsRun = false;
try
{
if (!isServiceIsExisted(name))
{
return false;
}
ServiceController sc = new ServiceController(name);
if (sc.Status == ServiceControllerStatus.StartPending ||
sc.Status == ServiceControllerStatus.Running)
{
IsRun = true;
}
sc.Close();
}
catch
{
IsRun = false;
}
return IsRun;
}
#endregion
#region 启动Windows服务
///
/// 启动Windows服务
///
/// 程序的服务名
/// 启动成功返回 true,否则返回 false;
public static bool StarmyService(string name)
{
ServiceController sc = new ServiceController(name);
if (sc.Status == ServiceControllerStatus.Stopped || sc.Status == ServiceControllerStatus.StopPending)
{
sc.Start();
//sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 3, 0));//等待3min
}
else
{
}
sc.Close();
return true;
}
#endregion
#region 停止Windows服务
///
/// 停止Windows服务
///
/// 程序的服务名
/// 停止成功返回 true,否则返回 false;
public static bool StopmyService(string name)
{
ServiceController sc = new ServiceController(name);
if (sc.Status == ServiceControllerStatus.Running ||
sc.Status == ServiceControllerStatus.StartPending)
{
try
{
sc.Stop();
sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 10));
}
catch (Exception exp)
{
MessageBox.Show(exp.Message.ToString());
}
}
else
{
}
sc.Close();
return true;
}
#endregion
#region 重启Windows服务
///
/// 重启Windows服务
///
/// 程序的服务名
/// 重启成功返回 true,否则返回 false;
public static bool RefreshmyService(string name)
{
return StopService(name) && StarmyService(name);
}
#endregion
#region 停止服务 命令强制停止
///
/// 停止服务
/// Author:SunZhiXiang
/// Time:2015-04-27 02:49:08
///
/// The name.
/// true if XXXX, false otherwise.
public static bool StopService(string name)
{
try
{
while (true)
{
if (Windows.IsRunning(name))//检查服务是否运行
{
//关闭服务
ProcessStartInfo psi = new ProcessStartInfo(@"cmd.exe", "/c sc stop " + name + "");
psi.WindowStyle = ProcessWindowStyle.Hidden;
Process process = Process.Start(psi);
}
else
{
break;
}
}
return true;
}
catch (Exception)
{
return false;
}
}
#endregion
}
}