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

    界面如下(自己使用,界面比较丑陋):
     
 
首先需要添加一个帮助类:
   代码如下:
 class Windows
    {
 
        /// <summary>
        /// 检查服务存在的存在性
        /// </summary>
        /// <param name=" NameService "> 服务名 </param>
        /// <returns> 存在返回 true,否则返回 false; </returns>
        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 ;
        }
 
        /// <summary>
        /// 安装Windows服务
        /// </summary>
        /// <param name="stateSaver"> 集合,当传递给 Install 方法时,stateSaver 参数指定的 IDictionary 应为空。</param>
        /// <param name="filepath"> 程序文件路径 </param>
        public static void InstallmyService( IDictionary stateSaverstring filepath)
        {
            try
            {
                AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller ();
                AssemblyInstaller1.UseNewContext = true ;
                AssemblyInstaller1.Path = filepath;
                stateSaver.Clear();
                AssemblyInstaller1.Install(stateSaver );
                AssemblyInstaller1.Commit(stateSaver );
                AssemblyInstaller1.Dispose();
            }
            catch (Exception exp )
            {
                MessageBox .Show(exp.Message.ToString ());
            }
        }
 
        /// <summary>
        /// 卸载Windows服务
        /// </summary>
        /// <param name="filepath"> 程序文件路径 </param>
        public static void UnInstallmyService( IDictionary stateSaver, string filepath)
        {
            try
            {
                AssemblyInstaller AssemblyInstaller1 = new AssemblyInstaller ();
                AssemblyInstaller1.UseNewContext = true ;
                AssemblyInstaller1.Path = filepath;
                AssemblyInstaller1.Uninstall(stateSaver );
                AssemblyInstaller1.Dispose();
            }
            catch (Exception exp )
            {
                MessageBox .Show(exp.Message.ToString ());
            }
        }
 
        /// <summary>
        /// 检查Windows服务是否在运行
        /// </summary>
        /// <param name="name"> 程序的服务名 </param>
        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;
        }
 
        /// <summary>
        /// 启动Windows服务
        /// </summary>
        /// <param name="name"> 程序的服务名 </param>
        /// <returns> 启动成功返回 true,否则返回 false; </returns>
        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
            }
            sc.Close();
            return true ;
        }
 
        /// <summary>
        /// 停止Windows服务
        /// </summary>
        /// <param name="name"> 程序的服务名 </param>
        /// <returns> 停止成功返回 true,否则返回 false; </returns>
        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 (010));
                }
                catch (Exception exp )
                {
                    MessageBox .Show(exp.Message.ToString ());
                }
            }
            sc.Close();
            return true ;
        }
 
        /// <summary>
        /// 重启Windows服务
        /// </summary>
        /// <param name="name"> 程序的服务名 </param>
        /// <returns> 重启成功返回 true,否则返回 false; </returns>
        public static bool RefreshmyService( string name)
        {
            return StopmyService( name&& StarmyService( name);
        }
    }

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

      //安装服务
        private void btnInstall_Click (object sender EventArgs e )
        {
            try
            {
                IDictionary dictionary = new Hashtable ();
                Windows .InstallmyService(dictionary ServerPath);
                if (Windows .isServiceIsExisted (ServerName))
                {
                    this .label1.Text = "服务已经安装。。" ;
                    this .btnInstall.Enabled = false ;
                    this .btnUnInstall.Enabled = true ;
                    this .btnStart.Enabled = true ;
                    this .btnStop.Enabled = false ;
                    MessageBox .Show( "服务安装成功!" );
                }
            }
            catch (Exception exp )
            {
                this .label1.Text = "服务安装失败。。" ;
                MessageBox .Show( "服务安装失败,ErrorCode:" + exp.Message );
            }
         
        }
 
       //卸载服务
        private void btnUnInstall_Click (object sender EventArgs e )
        {
            try
            {
                IDictionary dictionary = new Hashtable ();
                Windows .UnInstallmyService(dictionary ServerPath);
                if (! Windows.isServiceIsExisted (ServerName))
                {
                    this .label1.Text = "服务已经卸载。。" ;
                    this .btnInstall.Enabled = true ;
                    this .btnUnInstall.Enabled = false ;
                    this .btnStart.Enabled = false ;
                    this .btnStop.Enabled = false ;
                    MessageBox .Show( "服务卸载成功!" );
                }
            }
            catch (Exception exp )
            {
                this .label1.Text = "服务卸载失败。。" ;
                MessageBox .Show( "服务卸载失败,ErrorCode:" + exp.Message );
            }
        }
 
 
   //启动服务
        private void btnStart_Click (object sender EventArgs e )
        {
            try
            {
                if (Windows .StarmyService (ServerName))
                {
                    this .label1.Text = "服务启动中。。" ;
                    if (Windows .IsRunning( ServerName))
                    {
                        this .label1.Text = "服务正在运行。。" ;
                        this .btnInstall.Enabled = false ;
                        this .btnUnInstall.Enabled = false ;
                        this .btnStart.Enabled = false ;
                        this .btnStop.Enabled = true ;
                    }
                }
            }
            catch (Exception exp )
            {
                this .label1.Text = "服务启动失败。。" ;
                MessageBox .Show( "服务启动失败,ErrorCode:" + exp.Message );
            }
        }
 
 
   //停止服务
        private void btnStop_Click (object sender EventArgs e )
        {
            try
            {
                if (Windows .StopmyService (ServerName))
                {
                    this .label1.Text = "服务停止中。。" ;
                    if (! Windows.IsRunning (ServerName))
                    {
                        this .label1.Text = "服务已停止。。" ;
                        this .btnInstall.Enabled = false ;
                        this .btnUnInstall.Enabled = true ;
                        this .btnStart.Enabled = true ;
                        this .btnStop.Enabled = false ;
                    }
                }
            }
            catch (Exception exp )
            {
                this .label1.Text = "服务停止失败。。" ;
                MessageBox .Show( "服务停止失败,ErrorCode:" + exp.Message );
            }
        }
      
      private void InstallServices_Load (object sender EventArgs e )
        {
            ServiceController [] services = ServiceController.GetServices ();  //加载时候把系统的服务列表加载进来
            foreach (var serviceController in services )
            {
                this .cmbServiceList.Items.Add(serviceController.ServiceName );
            } 
     }
 至此所有的功能基本上都完成了,能够对你选择的服务进行安装和卸载了,其它两个按钮的事件读者可以自己加 
Demo下载:http://pan.baidu.com/s/1dDq2i2H
 

第十三篇 一个安装、管理windows服务的桌面程序的更多相关文章

  1. 【先定一个小目标】Redis 安装成windows服务-开机自启

    1.第一步安装成windows服务的,开机自启动 redis-server --service-install redis.windows.conf 2.启动\关闭 redis-server --se ...

  2. 如何创建一个标准的Windows服务

    出处:http://www.cnblogs.com/wuhuacong/archive/2009/02/11/1381428.html 如何创建一个标准的Windows服务 在很多时候,我们需要一个定 ...

  3. MongoDB安装成为Windows服务及日常使用遇到问题总结

    安装MongoDB: http://blog.csdn.net/liuzhoulong/article/details/6124566 严格按照上面的步骤,设置数据库目录,设置日志目录,安装服务.可是 ...

  4. 将 tomcat 安装成 windows 服务

    1.下载 tomcat 的windows 压缩包,一般以 .zip ,而且文件名中有 bin 的文件就是 2.解压下载的文件到某一个目录下,eg: TOMCAT_HOME 3.打开 cmd ,运行 % ...

  5. Redis 安装成windows服务- 一主二从三哨兵,sentinel安装为Windows服务

    这里只做记录说明 Redis的主从配置网上很多文章,百度一大堆,安装流程应该都可以配置通.我使用的这篇文章 https://blog.csdn.net/u010648555/article/detai ...

  6. MongoDB配置服务--MongoDB安装成为windows服务

    MongoDB安装成为windows服务 1.打开命令提示符(最好以管理员的身份打开),然后输入: mongod --logpath "D:\MongoDB\data\log\logs.tx ...

  7. 用 nssm 把 Nginx 安装成 Windows 服务方法

    总之:用 nssm 比 srvany.exe 简便多了.1. 下载nginx windows版本:http://nginx.org/ 2. 下载 nssm :http://nssm.cc/3. 安装N ...

  8. 使用instsrv.exe+srvany.exe将应用程序安装为windows服务[转]

      转自:http://qingmu.blog.51cto.com/4571483/1248649 一.什么是instsrv.exe和srvany.exe instsrv.exe.exe和srvany ...

  9. Nginx 安装成 Windows 服务

    Nginx 安装成Windows 服务方法,具体方法如下 1. 下载nginx windows版本 http://www.nginx.org 2. 下载微软的2个工具: instsrv.exe.srv ...

随机推荐

  1. Java中间件:淘宝网系统高性能利器(转)

    淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝.如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的稳定性.可靠性也显得尤为重要.那 ...

  2. 基因探针富集分析(GSEA)& GO & pathway

    http://blog.sina.com.cn/s/blog_4c1f21000100utyx.html GO是Gene Ontology的简称,是生物学家为了衡量基因的功能而而发起的一个项目,从分子 ...

  3. Bootstrap每天必学之导航条

    http://www.jb51.net/article/75534.htm Bootstrap每天必学之导航条,本文向大家讲解了多种多样的导航条,以及导航条中元素的实现方法,感兴趣的小伙伴们可以参考一 ...

  4. Angular - - ngChange、ngChecked、ngClick、ngDblclick

    ngChange 当用户更改输入时,执行给定的表达式.表达式是立即进行执行的,这个和javascript的onChange事件的只有在触发事件的变化结束的时候执行不同. 格式:ng-change=”v ...

  5. 排序问题思考(要求时间和空间复杂度尽可能的低)【Part 2】

    继上篇博文,今天我将先介绍一下什么是计数排序,将计数排序描述清楚后,再进行后续的桶排序方法解决这个问题. 通常情况下,一提到排序,大家第一反应就是比较,其实,今天我要说的这个计数排序,不是基于比较的排 ...

  6. Linux CentOS 安装 httpd

    1.查看并安装服务器是否安装编译器 make gcc gcc-c++ 查看:rpm -q gcc-c++ 2.查看SELinux 和 iptables 的状态 3.在根目录新建文件夹 lamp 4.使 ...

  7. spring 里面的StringUtils,先放这儿,有时间研究吧

    /* * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, Vers ...

  8. javaweb入门实例---servlet例子

    1.编写servlet: TreeDataServlet.java package com.maggie.tree; import java.io.IOException; import javax. ...

  9. 使用AIR进行移动APP开发常见功能和问题(下)

    1.  Air如何判断android.ios 平台网络连接状态? Android,使用as3原生api: if(NetworkInfo.isSupported)//只有android支持 Networ ...

  10. Linux笔记(十一) - 文件系统管理

    (1)文件系统查看命令:df [选项] [挂载点]-a 显示所有文件系统信息,包括特殊文件系统,如/proc /sysfs-h 使用习惯单位显示容量,如KB,MB或GB-T 显示文件系统类型-m 以M ...