C#通过SC命令和静态公共类来操作Windows服务
2016-01-09 00:58
447 查看
调用的Windows服务应用程序网址:/article/6212139.html
一、引用
二、公共静态类:可以单独放到类库里
三、静态公共类操作Windows服务-------控制台程序
四、通过SC命令操作Windows服务-------控制台程序
一、引用
二、公共静态类:可以单独放到类库里
usingSystem; usingSystem.Collections; usingSystem.Collections.Generic; usingSystem.Configuration.Install; usingSystem.Linq; usingSystem.ServiceProcess; usingSystem.Text; usingMicrosoft.Win32; namespaceCM.Web.UI { publicstaticclassWindowsServiceHelper { #region已封装Window服务 ///<summary> ///安装服务 ///</summary> ///<paramname="NameService">Windows服务显示名称</param> ///<returns>存在返回true,否则返回false;</returns> publicstaticboolInstallService(stringserviceName) { boolflag=true; if(!IsServiceIsExisted(serviceName)) { try { stringlocation=System.Reflection.Assembly.GetExecutingAssembly().Location; stringserviceFileName=location.Substring(0,location.LastIndexOf('\\')+1)+serviceName+".exe"; //测试用的绝对路径 //stringserviceFileName=@"F:\CM.WebSite\KJLMDemo\bin\Debug\KJLMDemo.exe"; InstallMyService(null,serviceFileName); } catch { flag=false; } } returnflag; } ///<summary> ///卸载服务 ///</summary> ///<paramname="NameService">Windows服务显示名称</param> ///<returns>存在返回true,否则返回false;</returns> publicstaticboolUninstallService(stringserviceName) { boolflag=true; if(IsServiceIsExisted(serviceName)) { try { stringlocation=System.Reflection.Assembly.GetExecutingAssembly().Location; stringserviceFileName=location.Substring(0,location.LastIndexOf('\\')+1)+serviceName+".exe"; //测试用的绝对路径 //stringserviceFileName=@"F:\CM.WebSite\KJLMDemo\bin\Debug\KJLMDemo.exe"; UnInstallMyService(serviceFileName); } catch { flag=false; } } returnflag; } ///<summary> ///检查Windows服务是否存在 ///</summary> ///<paramname="NameService">Windows服务显示名称</param> ///<returns>存在返回true,否则返回false;</returns> publicstaticboolIsServiceIsExisted(stringserviceName) { ServiceController[]services=ServiceController.GetServices(); foreach(ServiceControllersinservices) { if(s.ServiceName.ToLower()==serviceName.ToLower()) { returntrue; } } returnfalse; } ///<summary> ///安装Windows服务 ///</summary> ///<paramname="stateSaver">集合</param> ///<paramname="filepath">Windows服务程序文件路径</param> privatestaticvoidInstallMyService(IDictionarystateSaver,stringfilePath) { AssemblyInstallerAssemblyInstaller1=newAssemblyInstaller(); AssemblyInstaller1.UseNewContext=true; AssemblyInstaller1.Path=filePath; AssemblyInstaller1.Install(stateSaver); AssemblyInstaller1.Commit(stateSaver); AssemblyInstaller1.Dispose(); } ///<summary> ///卸载Windows服务 ///</summary> ///<paramname="filePath">Windows服务程序文件路径</param> privatestaticvoidUnInstallMyService(stringfilePath) { AssemblyInstallerAssemblyInstaller1=newAssemblyInstaller(); AssemblyInstaller1.UseNewContext=true; AssemblyInstaller1.Path=filePath; AssemblyInstaller1.Uninstall(null); AssemblyInstaller1.Dispose(); } ///<summary> ///判断某个Windows服务是否启动 ///</summary> ///<paramname="serviceName">Windows服务显示名称</param> ///<returns>bool</returns> publicstaticboolIsServiceStart(stringserviceName) { ServiceControllerpsc=newServiceController(serviceName); boolbStartStatus=false; try { if(!psc.Status.Equals(ServiceControllerStatus.Stopped)) { bStartStatus=true; } returnbStartStatus; } catch(Exceptionex) { thrownewException(ex.Message); } } ///<summary> ///修改服务的启动项2为自动,3为手动 ///</summary> ///<paramname="startType">2为自动,3为手动</param> ///<paramname="serviceName">Windows服务显示名称</param> ///<returns>bool</returns> publicstaticboolChangeServiceStartType(intstartType,stringserviceName) { try { RegistryKeyregist=Registry.LocalMachine; RegistryKeysysReg=regist.OpenSubKey("SYSTEM"); RegistryKeycurrentControlSet=sysReg.OpenSubKey("CurrentControlSet"); RegistryKeyservices=currentControlSet.OpenSubKey("Services"); RegistryKeyservicesName=services.OpenSubKey(serviceName,true); servicesName.SetValue("Start",startType); } catch(Exceptionex) { returnfalse; } returntrue; } ///<summary> ///启动服务 ///</summary> ///<paramname="serviceName">Windows服务显示名称</param> ///<returns>bool</returns> publicstaticboolStartService(stringserviceName) { boolflag=true; if(IsServiceIsExisted(serviceName)) { System.ServiceProcess.ServiceControllerservice=newSystem.ServiceProcess.ServiceController(serviceName); if(service.Status!=System.ServiceProcess.ServiceControllerStatus.Running&&service.Status!=System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); for(inti=0;i<60;i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if(service.Status==System.ServiceProcess.ServiceControllerStatus.Running) { break; } if(i==59) { flag=false; } } } } returnflag; } ///<summary> ///停止服务 ///</summary> ///<paramname="serviceName">Windows服务显示名称</param> ///<returns>bool</returns> publicstaticboolStopService(stringserviceName) { boolflag=true; if(IsServiceIsExisted(serviceName)) { System.ServiceProcess.ServiceControllerservice=newSystem.ServiceProcess.ServiceController(serviceName); if(service.Status==System.ServiceProcess.ServiceControllerStatus.Running) { service.Stop(); for(inti=0;i<60;i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if(service.Status==System.ServiceProcess.ServiceControllerStatus.Stopped) { break; } if(i==59) { flag=false; } } } } returnflag; } #endregion } }
三、静态公共类操作Windows服务-------控制台程序
usingSystem; usingSystem.Collections; usingSystem.Collections.Generic; usingSystem.Configuration.Install; usingSystem.Diagnostics; usingSystem.Linq; usingSystem.ServiceProcess; usingSystem.Text; usingSystem.Threading.Tasks; usingMicrosoft.Win32; namespaceConsoleService { classProgram { staticvoidMain(string[]args) { Console.WriteLine("Window服务应用程序"); Console.WriteLine("请选择,[1]安装服务[2]卸载服务[3]启动服务[4]关闭服务[5]暂停/继续[6]检测服务"); varrs=int.Parse(Console.ReadLine()); //一、通过封装类操作Windows服务 switch(rs) { case1://安装服务 InstallService("ServiceDemo"); Console.WriteLine("安装成功"); break; case2://卸载服务 UninstallService("ServiceDemo"); Console.WriteLine("卸载成功"); break; case3://启动服务 StartService("ServiceDemo"); Console.WriteLine("启动服务成功"); break; case4://关闭服务 StopService("ServiceDemo"); Console.WriteLine("关闭服务成功"); break; case5://暂停/继续 ServiceControllerserviceControllerPauseToContinue=newServiceController("KJLMDemo"); if(serviceControllerPauseToContinue.CanPauseAndContinue) { if(serviceControllerPauseToContinue.Status==ServiceControllerStatus.Running) serviceControllerPauseToContinue.Pause(); elseif(serviceControllerPauseToContinue.Status==ServiceControllerStatus.Paused) serviceControllerPauseToContinue.Continue(); } break; case6://判断服务是否开启 Console.WriteLine("服务状态:"+IsServiceStart("ServiceDemo")); break; default: break; } Console.ReadKey(); } } }
四、通过SC命令操作Windows服务-------控制台程序
usingSystem; usingSystem.Collections; usingSystem.Collections.Generic; usingSystem.Configuration.Install; usingSystem.Diagnostics; usingSystem.Linq; usingSystem.ServiceProcess; usingSystem.Text; usingSystem.Threading.Tasks; usingMicrosoft.Win32; namespaceConsoleService { classProgram { staticvoidMain(string[]args) { Console.WriteLine("Window服务应用程序"); Console.WriteLine("请选择,[1]安装服务[2]卸载服务[3]启动服务[4]关闭服务[5]暂停/继续[6]检测服务"); varrs=int.Parse(Console.ReadLine());
//二、通过SC命令操作Windows服务
switch(rs)
{
case1://安装服务
//取当前服务的路径bin/debug下面的exe文件
stringpath=@"F:\CM.WebSite\KJLMDemo\bin\Debug\KJLMDemo.exe";
Process.Start("sc","createKJLMDemobinPath=\""+path+"\"");
Console.WriteLine("安装成功");
break;
case2://卸载服务
Process.Start("sc","deleteKJLMDemo");
Console.WriteLine("卸载成功");
break;
case3://启动服务
ServiceControllerserviceControllerStart=newServiceController("KJLMDemo");
serviceControllerStart.Start();
Console.WriteLine("启动服务成功");
break;
case4://关闭服务
ServiceControllerserviceControllerStop=newServiceController("KJLMDemo");
serviceControllerStop.Stop();
Console.WriteLine("关闭服务成功");
break;
case5://暂停/继续
ServiceControllerserviceControllerPauseToContinue=newServiceController("KJLMDemo");
if(serviceControllerPauseToContinue.CanPauseAndContinue)
{
if(serviceControllerPauseToContinue.Status==ServiceControllerStatus.Running)
serviceControllerPauseToContinue.Pause();
elseif(serviceControllerPauseToContinue.Status==ServiceControllerStatus.Paused)
serviceControllerPauseToContinue.Continue();
}
break;
case6://判断服务是否开启
ServiceControllerserviceControllerIsEnabled=newServiceController("KJLMDemo");
stringStatus=serviceControllerIsEnabled.Status.ToString();
Console.WriteLine("服务状态:"+Status);
break;
default:
break;
}
}
}
相关文章推荐
- C#创建Window服务图解,安装、配置、以及C#操作Windows服务
- C# 继承 和 组合
- C#操作目录和文件
- c#中绝对路径和相对路径
- C#Winform程序如何发布并自动升级(图解)
- c#汉字转为拼音
- c#.net调用pdf2swf.exe将pdf文件转换为swf,vs中运行正常,布署IIS服务器部署转换后文字部分为空白
- 享元模式 c#
- .net和c#下的自定义配置
- editplus配置csharp
- 桥接模式 c#
- c#获取当前时间是本年的第几周,本月的第几周
- .net 解析xml
- 组合模式 c#
- C#--静态函数成员
- 原型模式 c#
- C#设计模式00-简单工厂模式
- 适配器模式 c#
- C#--静态成员的生命周期
- C#只允许启动一个WinFrom进程