C#程序安装.net服务(不使用InstallUtil.exe)

前面写了通常的写.net服务 的方法。 其实也可以不用该工具来安装服务,比如在一个Winform中点一个按钮来实现安装。 思路其实很简单,你通过 System.Configuration.Install.ManagedInstallerClass 类中的静态方法 InstallHelper就可以实现手工安装。 该方法的签名如下:

public static void InstallHelper(string[] args) 
其中参数 args 就是你用 InstallUtil.exe 工具安装时的参数。一般就是一个exe的文件名。
实现的步骤如下:
前3步和 前面写的一样,可以参考这里 
http://blog.csdn.net/lembo520390/archive/2009/06/02/4236379.aspx 
接着你可以新建一个winform的项目,在上面放一个按钮,按钮的点击事件代码可以这样:
view plaincopy to clipboardprint?
/// <summary>   
   /// 安装服务   
   /// </summary>   
   private void btnInstall_Click(object sender, EventArgs e)   
   {   
       string[] args = { "myService.exe"};   
       ServiceController sCtr = new ServiceController(serviceName);   
       if (!ServiceIsExisted(serviceName))   
       {   
           try 
           {   
               ManagedInstallerClass.InstallHelper(args);   
           }   
           catch (Exception ex)   
           {   
               MessageBox.Show(ex.Message);   
               return;   
           }   
       }   
       else 
       {   
           MessageBox.Show("该服务已经存在,不用重复安装。");   
       }   
   } 
     /// <summary>
        /// 安装服务
        /// </summary>
        private void btnInstall_Click(object sender, EventArgs e)
        {
            string[] args = { "myService.exe"};
            ServiceController sCtr = new ServiceController(serviceName);
            if (!ServiceIsExisted(serviceName))
            {
                try
                {
                    ManagedInstallerClass.InstallHelper(args);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
            else
            {
                MessageBox.Show("该服务已经存在,不用重复安装。");
            }
        } 
其中ServiceIsExisted 是判断服务是否存在的方法,代码如下:
view plaincopy to clipboardprint?
/// <summary>   
/// 检查指定的服务是否存在。   
/// </summary>   
/// <param name="serviceName">要查找的服务名字</param>   
/// <returns></returns>   
private bool ServiceIsExisted(string svcName)   
{   
    ServiceController[] services = ServiceController.GetServices();   
    foreach (ServiceController s in services)   
    {   
        if (s.ServiceName == svcName)   
        {   
            return true;   
        }   
    }   
    return false;   

        /// <summary>
        /// 检查指定的服务是否存在。
        /// </summary>
        /// <param name="serviceName">要查找的服务名字</param>
        /// <returns></returns>
        private bool ServiceIsExisted(string svcName)
        {
            ServiceController[] services = ServiceController.GetServices();
            foreach (ServiceController s in services)
            {
                if (s.ServiceName == svcName)
                {
                    return true;
                }
            }
            return false;
        }

然后把前面生成的myService.exe和这个winform生成的可执行文件放到同一个目录下,
运行winform点按钮就可实现和运行 InstallUtil.exe 工具一样的效果。
其实 InstallUtil.exe内部也是调用了ManagedInstallerClass.InstallHelper方法。 自己Reflector一下就知道了。:)


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lembo520390/archive/2009/06/02/4236463.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章