c# 安装、注册windows service服务,判断服务是否存在,是否启动
一、安装服务:
private void InstallService(IDictionary stateSaver, string filepath) { try {
System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName"); if(!ServiceIsExisted("ServiceName")) {
//Install Service
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path =filepath; myAssemblyInstaller.Install(stateSaver); myAssemblyInstaller.Commit(stateSaver); myAssemblyInstaller.Dispose(); //--Start Service service.Start(); } else {
if (service.Status !=
System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) {
service.Start(); } } }
catch (Exception ex) {
throw new Exception("installServiceError\n" + ex.Message); } }
二、卸载windows服务:
private void UnInstallService(string filepath) { try {
if (ServiceIsExisted("ServiceName"))
{
//UnInstall Service
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.Uninstall(null); myAssemblyInstaller.Dispose(); } }
catch (Exception ex) {
throw new Exception("unInstallServiceError\n" + ex.Message); } }
三、判断window服务是否存在:
private bool ServiceIsExisted(string serviceName) {
ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) {
if (s.ServiceName == serviceName) {
return true; } }
return false; }
四、启动服务:
private 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 < 60; i++) {
service.Refresh();
System.Threading.Thread.Sleep(1000); if (service.Status ==
System.ServiceProcess.ServiceControllerStatus.Running) {
break; }
if (i == 59) {
throw new Exception(startServiceError.Replace("$s$", serviceName)); } } } } }
五、停止服务:
private 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 < 60; i++) {
service.Refresh();
System.Threading.Thread.Sleep(1000); if (service.Status ==
System.ServiceProcess.ServiceControllerStatus.Stopped) {
break; }
if (i == 59) {
throw new Exception(stopServiceError.Replace("$s$", serviceName)); } } }
} }
一、安装服务:
private void InstallService(IDictionary stateSaver, string filepath) { try {
System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName"); if(!ServiceIsExisted("ServiceName")) {
//Install Service
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path =filepath; myAssemblyInstaller.Install(stateSaver); myAssemblyInstaller.Commit(stateSaver); myAssemblyInstaller.Dispose(); //--Start Service service.Start(); } else {
if (service.Status !=
System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) {
service.Start(); } } }
catch (Exception ex) {
throw new Exception("installServiceError\n" + ex.Message); } }
二、卸载windows服务:
private void UnInstallService(string filepath) { try {
if (ServiceIsExisted("ServiceName"))
{
//UnInstall Service
AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.Uninstall(null); myAssemblyInstaller.Dispose(); } }
catch (Exception ex) {
throw new Exception("unInstallServiceError\n" + ex.Message); } }
三、判断window服务是否存在:
private bool ServiceIsExisted(string serviceName) {
ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) {
if (s.ServiceName == serviceName) {
return true; } }
return false; }
四、启动服务:
private 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 < 60; i++) {
service.Refresh();
System.Threading.Thread.Sleep(1000); if (service.Status ==
System.ServiceProcess.ServiceControllerStatus.Running) {
break; }
if (i == 59) {
throw new Exception(startServiceError.Replace("$s$", serviceName)); } } } } }
五、停止服务:
private 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 < 60; i++) {
service.Refresh();
System.Threading.Thread.Sleep(1000); if (service.Status ==
System.ServiceProcess.ServiceControllerStatus.Stopped) {
break; }
if (i == 59) {
throw new Exception(stopServiceError.Replace("$s$", serviceName)); } } }
} }