using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
System.Collections;
using
System.Configuration.Install;
using
System.Collections.Specialized;
using
System.ServiceProcess;
namespace
IAU.ServerInstall.BLL
{ public
class ServiceControl
{
/// <summary>
/// 注册服务(注册完就启动,已经存在的服务直接启动。)
/// </summary>
/// <param name="strServiceName">服务名称</param>
/// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param>
public
void Register( string
strServiceName, string
strServiceInstallPath)
{
IDictionary mySavedState = new
Hashtable();
try
{
System.ServiceProcess.ServiceController service = new
System.ServiceProcess.ServiceController(strServiceName);
//服务已经存在则卸载
if
(ServiceIsExisted(strServiceName))
{
//StopService(strServiceName);
UnInstallService(strServiceName, strServiceInstallPath);
}
service.Refresh();
AssemblyInstaller myAssemblyInstaller = new
AssemblyInstaller();
mySavedState.Clear();
myAssemblyInstaller.Path = strServiceInstallPath;
myAssemblyInstaller.UseNewContext = true ;
myAssemblyInstaller.Install(mySavedState);
myAssemblyInstaller.Commit(mySavedState);
myAssemblyInstaller.Dispose();
service.Start();
}
catch
(Exception ex)
{
throw
new Exception( "注册服务时出错:"
+ ex.Message);
}
}
/// <summary>
/// 卸载服务
/// </summary>
/// <param name="strServiceName">服务名称</param>
/// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param>
public
void UnInstallService( string
strServiceName, string
strServiceInstallPath)
{
try
{
if
(ServiceIsExisted(strServiceName))
{
//UnInstall Service
AssemblyInstaller myAssemblyInstaller = new
AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true ;
myAssemblyInstaller.Path = strServiceInstallPath;
myAssemblyInstaller.Uninstall( null );
myAssemblyInstaller.Dispose();
}
}
catch
(Exception ex)
{
throw
new Exception( "卸载服务时出错:"
+ ex.Message);
}
}
/// <summary>
/// 判断服务是否存在
/// </summary>
/// <param name="serviceName">服务名</param>
/// <returns></returns>
public
bool ServiceIsExisted( string
serviceName)
{
ServiceController[] services = ServiceController.GetServices();
foreach
(ServiceController s in
services)
{
if
(s.ServiceName == serviceName)
{
return
true ;
}
}
return
false ;
}
/// <summary>
/// 启动服务(启动存在的服务,30秒后启动失败报错)
/// </summary>
/// <param name="serviceName">服务名</param>
public
void StartService( string
serviceName)
{
if
(ServiceIsExisted(serviceName))
{
System.ServiceProcess.ServiceController service = new
System.ServiceProcess.ServiceController(serviceName);
if
(service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
{
service.Start();
for
( int
i = 0; i < 30; i++)
{
service.Refresh();
System.Threading.Thread.Sleep(1000);
if
(service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
break ;
}
if
(i == 29)
{
throw
new Exception( "服务"
+ serviceName + "启动失败!" );
}
}
}
}
}
/// <summary>
/// 停止服务(停止存在的服务,30秒后停止失败报错)
/// </summary>
/// <param name="serviceName"></param>
public
void StopService( string
serviceName)
{
if
(ServiceIsExisted(serviceName))
{
System.ServiceProcess.ServiceController service = new
System.ServiceProcess.ServiceController(serviceName);
if
(service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
{
service.Stop();
for
( int
i = 0; i < 30; i++)
{
service.Refresh();
System.Threading.Thread.Sleep(1000);
if
(service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
{
break ;
}
if
(i == 29)
{
throw
new Exception( "服务"
+ serviceName + "停止失败!" );
}
}
}
}
}
}
} |