您的位置:首页 > 其它

第十三篇 一个安装、管理windows服务的桌面程序

2015-01-07 10:44 746 查看
在网上看到一个修改程序入口的程序去把windows 服务修改成控制台的程序,然后利用控制台的程序把服务安装和管理,也想起自己原来也写了一个对windows 报务管理的程序,不过是winform的。

界面如下(自己使用,界面比较丑陋):





首先需要添加一个帮助类:
代码如下:

class Windows
[align=left] {[/align]
[align=left][/align]
[align=left]/// <summary>[/align]
[align=left]/// 检查服务存在的存在性[/align]
[align=left]/// </summary>[/align]
[align=left]/// <param name=" NameService "> 服务名 </param>[/align]
[align=left]/// <returns> 存在返回 true,否则返回 false; </returns>[/align]
[align=left]public static boolisServiceIsExisted( string NameService)[/align]
[align=left] {[/align]
[align=left]ServiceController [] services=ServiceController.GetServices ();[/align]
[align=left]foreach (ServiceController s in services )[/align]
[align=left] {[/align]
[align=left]if (s.ServiceName.ToLower () ==NameService.ToLower ())[/align]
[align=left] {[/align]
[align=left]return true ;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]return false ;[/align]
[align=left] }[/align]
[align=left][/align]
[align=left]/// <summary>[/align]
[align=left]/// 安装Windows服务[/align]
[align=left]/// </summary>[/align]
[align=left]/// <param name="stateSaver"> 集合,当传递给 Install 方法时,stateSaver 参数指定的 IDictionary 应为空。</param>[/align]
[align=left]/// <param name="filepath"> 程序文件路径 </param>[/align]
[align=left]public static voidInstallmyService( IDictionary stateSaver, string filepath)[/align]
[align=left] {[/align]
[align=left]try[/align]
[align=left] {[/align]
[align=left]AssemblyInstaller AssemblyInstaller1=newAssemblyInstaller ();[/align]
[align=left]AssemblyInstaller1.UseNewContext= true ;[/align]
[align=left]AssemblyInstaller1.Path= filepath;[/align]
[align=left]stateSaver.Clear();[/align]
[align=left]AssemblyInstaller1.Install(stateSaver );[/align]
[align=left]AssemblyInstaller1.Commit(stateSaver );[/align]
[align=left]AssemblyInstaller1.Dispose();[/align]
[align=left] }[/align]
[align=left]catch (Exception exp )[/align]
[align=left] {[/align]
[align=left]MessageBox .Show(exp.Message.ToString ());[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left][/align]
[align=left]/// <summary>[/align]
[align=left]/// 卸载Windows服务[/align]
[align=left]/// </summary>[/align]
[align=left]/// <param name="filepath"> 程序文件路径 </param>[/align]
[align=left]public static voidUnInstallmyService( IDictionary stateSaver, string filepath)[/align]
[align=left] {[/align]
[align=left]try[/align]
[align=left] {[/align]
[align=left]AssemblyInstaller AssemblyInstaller1=newAssemblyInstaller ();[/align]
[align=left]AssemblyInstaller1.UseNewContext= true ;[/align]
[align=left]AssemblyInstaller1.Path= filepath;[/align]
[align=left]AssemblyInstaller1.Uninstall(stateSaver );[/align]
[align=left]AssemblyInstaller1.Dispose();[/align]
[align=left] }[/align]
[align=left]catch (Exception exp )[/align]
[align=left] {[/align]
[align=left]MessageBox .Show(exp.Message.ToString ());[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left][/align]
[align=left]/// <summary>[/align]
[align=left]/// 检查Windows服务是否在运行[/align]
[align=left]/// </summary>[/align]
[align=left]/// <param name="name"> 程序的服务名 </param>[/align]
[align=left]public static boolIsRunning( string name)[/align]
[align=left] {[/align]
[align=left]bool IsRun= false ;[/align]
[align=left]try[/align]
[align=left] {[/align]
[align=left]if (!isServiceIsExisted( name))[/align]
[align=left] {[/align]
[align=left]return false ;[/align]
[align=left] }[/align]
[align=left]ServiceController sc= new ServiceController (name);[/align]
[align=left]if (sc.Status==ServiceControllerStatus.StartPending ||[/align]
[align=left]sc.Status== ServiceControllerStatus .Running)[/align]
[align=left] {[/align]
[align=left]IsRun= true ;[/align]
[align=left] }[/align]
[align=left]sc.Close();[/align]
[align=left] }[/align]
[align=left]catch[/align]
[align=left] {[/align]
[align=left]IsRun= false ;[/align]
[align=left] }[/align]
[align=left]return IsRun;[/align]
[align=left] }[/align]
[align=left][/align]
[align=left]/// <summary>[/align]
[align=left]/// 启动Windows服务[/align]
[align=left]/// </summary>[/align]
[align=left]/// <param name="name"> 程序的服务名 </param>[/align]
[align=left]/// <returns> 启动成功返回 true,否则返回 false; </returns>[/align]
[align=left]public static boolStarmyService( string name)[/align]
[align=left] {[/align]
[align=left]ServiceController sc= new ServiceController (name);[/align]
[align=left]if (sc.Status==ServiceControllerStatus.Stopped ||sc.Status ==ServiceControllerStatus .StopPending)[/align]
[align=left] {[/align]
[align=left][/align]
[align=left]sc.Start();[/align]
[align=left]//sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 3, 0));//等待3min[/align]
[align=left] }[/align]
[align=left]sc.Close();[/align]
[align=left]return true ;[/align]
[align=left] }[/align]
[align=left][/align]
[align=left]/// <summary>[/align]
[align=left]/// 停止Windows服务[/align]
[align=left]/// </summary>[/align]
[align=left]/// <param name="name"> 程序的服务名 </param>[/align]
[align=left]/// <returns> 停止成功返回 true,否则返回 false; </returns>[/align]
[align=left]public static boolStopmyService( string name)[/align]
[align=left] {[/align]
[align=left]ServiceController sc= new ServiceController (name);[/align]
[align=left]if (sc.Status==ServiceControllerStatus.Running ||[/align]
[align=left]sc.Status== ServiceControllerStatus .StartPending )[/align]
[align=left] {[/align]
[align=left]try[/align]
[align=left] {[/align]
[align=left][/align]
[align=left]sc.Stop();[/align]
[align=left]sc.WaitForStatus( ServiceControllerStatus.Stopped , new TimeSpan (0, 0 , 10));[/align]
[align=left] }[/align]
[align=left]catch (Exception exp )[/align]
[align=left] {[/align]
[align=left]MessageBox .Show(exp.Message.ToString ());[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]sc.Close();[/align]
[align=left]return true ;[/align]
[align=left] }[/align]
[align=left][/align]
[align=left]/// <summary>[/align]
[align=left]/// 重启Windows服务[/align]
[align=left]/// </summary>[/align]
[align=left]/// <param name="name"> 程序的服务名 </param>[/align]
[align=left]/// <returns> 重启成功返回 true,否则返回 false; </returns>[/align]
[align=left]public static boolRefreshmyService( string name)[/align]
[align=left] {[/align]
[align=left]return StopmyService( name) && StarmyService( name);[/align]
[align=left] }[/align]
[align=left] }[/align]

下面只需要在按钮事件下面写入不同的代码就行了:


[align=left] //安装服务[/align]
[align=left]private void btnInstall_Click (object sender , EventArgs e )[/align]
[align=left] {[/align]
[align=left]try[/align]
[align=left] {[/align]
[align=left]IDictionary dictionary=newHashtable ();[/align]
[align=left]Windows .InstallmyService(dictionary , ServerPath);[/align]
[align=left]if (Windows .isServiceIsExisted (ServerName))[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务已经安装。。" ;[/align]
[align=left]this .btnInstall.Enabled= false ;[/align]
[align=left]this .btnUnInstall.Enabled= true ;[/align]
[align=left]this .btnStart.Enabled= true ;[/align]
[align=left]this .btnStop.Enabled= false ;[/align]
[align=left]MessageBox .Show( "服务安装成功!" );[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]catch (Exception exp )[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务安装失败。。" ;[/align]
[align=left]MessageBox .Show( "服务安装失败,ErrorCode:" +exp.Message );[/align]
[align=left] }[/align]
[align=left][/align]
[align=left] }[/align]

[align=left][/align]

[align=left] //卸载服务[/align]
[align=left]private void btnUnInstall_Click (object sender , EventArgs e )[/align]
[align=left] {[/align]
[align=left]try[/align]
[align=left] {[/align]
[align=left]IDictionary dictionary=newHashtable ();[/align]
[align=left]Windows .UnInstallmyService(dictionary , ServerPath);[/align]
[align=left]if (! Windows.isServiceIsExisted (ServerName))[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务已经卸载。。" ;[/align]
[align=left]this .btnInstall.Enabled= true ;[/align]
[align=left]this .btnUnInstall.Enabled= false ;[/align]
[align=left]this .btnStart.Enabled= false ;[/align]
[align=left]this .btnStop.Enabled= false ;[/align]
[align=left]MessageBox .Show( "服务卸载成功!" );[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]catch (Exception exp )[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务卸载失败。。" ;[/align]
[align=left]MessageBox .Show( "服务卸载失败,ErrorCode:" +exp.Message );[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left][/align]
[align=left][/align]

[align=left] //启动服务[/align]
[align=left]private void btnStart_Click (object sender , EventArgs e )[/align]
[align=left] {[/align]
[align=left]try[/align]
[align=left] {[/align]
[align=left]if (Windows .StarmyService (ServerName))[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务启动中。。" ;[/align]
[align=left]if (Windows .IsRunning( ServerName))[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务正在运行。。" ;[/align]
[align=left]this .btnInstall.Enabled= false ;[/align]
[align=left]this .btnUnInstall.Enabled= false ;[/align]
[align=left]this .btnStart.Enabled= false ;[/align]
[align=left]this .btnStop.Enabled= true ;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]catch (Exception exp )[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务启动失败。。" ;[/align]
[align=left]MessageBox .Show( "服务启动失败,ErrorCode:" +exp.Message );[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left][/align]
[align=left][/align]

[align=left] //停止服务[/align]
[align=left]private void btnStop_Click (object sender , EventArgs e )[/align]
[align=left] {[/align]
[align=left]try[/align]
[align=left] {[/align]
[align=left]if (Windows .StopmyService (ServerName))[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务停止中。。" ;[/align]
[align=left]if (! Windows.IsRunning (ServerName))[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务已停止。。" ;[/align]
[align=left]this .btnInstall.Enabled= false ;[/align]
[align=left]this .btnUnInstall.Enabled= true ;[/align]
[align=left]this .btnStart.Enabled= true ;[/align]
[align=left]this .btnStop.Enabled= false ;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]catch (Exception exp )[/align]
[align=left] {[/align]
[align=left]this .label1.Text= "服务停止失败。。" ;[/align]
[align=left]MessageBox .Show( "服务停止失败,ErrorCode:" +exp.Message );[/align]
[align=left] }[/align]
[align=left] }[/align]

[align=left][/align]

[align=left] private void InstallServices_Load (object sender , EventArgs e )[/align]
[align=left] {[/align]
[align=left]ServiceController [] services=ServiceController.GetServices (); //加载时候把系统的服务列表加载进来[/align]
[align=left]foreach (var serviceController in services )[/align]
[align=left] {[/align]
[align=left]this .cmbServiceList.Items.Add(serviceController.ServiceName );[/align]
[align=left] }[/align]
[align=left] } 至此所有的功能基本上都完成了,能够对你选择的服务进行安装和卸载了,其它两个按钮的事件读者可以自己加 [/align]
[align=left]Demo下载:http://pan.baidu.com/s/1dDq2i2H[/align]

[align=left][/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: