• C#:安装Windows服务,动态指定服务名及描述(转载)


    来源:http://www.cnblogs.com/Fooo/p/3476675.html

    Installer.cs

    public Installer()
    {
        InitializeComponent();
        /* 服务未注册前,System.Configuration.ConfigurationManager.AppSettings读取无效。
        //serviceInstaller1.ServiceName = "ChinaHN.XHService." + System.Configuration.ConfigurationManager.AppSettings["Service_ID"];
        //serviceInstaller1.DisplayName = System.Configuration.ConfigurationManager.AppSettings["Service_DisplayName"];
        //serviceInstaller1.Description = System.Configuration.ConfigurationManager.AppSettings["Service_Description"]; 
        */
    
        /* 指定该服务的启动模式:自动,手动,禁用
        serviceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.;
        */
        using (SettingHelper setting = new SettingHelper())
        {
            //系统用于标志此服务名称(唯一性)
            serviceInstaller1.ServiceName = setting.ServiceName;
            //向用户标志服务的显示名称(可以重复)
            serviceInstaller1.DisplayName = setting.DisplayName;
            //服务的说明(描述)
            serviceInstaller1.Description = setting.Description;
        } 
    }

    配置类:SettingHelper.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System;
    using System.IO;
    using System.Xml;
    
    
    //-------------------------------------
    // 描述:初始化服务配置帮助类 
    // 作者:fooo 
    // 完成时间:2013-12-16
    //------------------------------------- 
    namespace XHService
    {
        public class SettingHelper : IDisposable 
        {
            #region 私有成员
            private string _ServiceName;
            private string _DisplayName;
            private string _Description;
            #endregion
    
            #region 构造函数
            /// <summary> 
            /// 初始化服务配置帮助类 
            /// </summary> 
            public SettingHelper()
            {
                InitSettings();
            }
            #endregion
    
            #region 属性
            /// <summary> 
            /// 系统用于标志此服务的名称 
            /// </summary> 
            public string ServiceName
            {
                get { return _ServiceName; }
            }
            /// <summary> 
            /// 向用户标志服务的友好名称 
            /// </summary> 
            public string DisplayName
            {
                get { return _DisplayName; }
            }
            /// <summary> 
            /// 服务的说明 
            /// </summary> 
            public string Description
            {
                get { return _Description; }
            }
            #endregion
    
            #region 私有方法
            #region 初始化服务配置信息
            /// <summary> 
            /// 初始化服务配置信息 
            /// </summary> 
            private void InitSettings()
            {            
                string root = System.Reflection.Assembly.GetExecutingAssembly().Location;
                string xmlfile = root.Remove(root.LastIndexOf('\') + 1) + "XHService.exe.config";
                if (File.Exists(xmlfile))
                {
                    //系统用于标志此服务名称(唯一性)
                    _ServiceName = "XHService." + Get_ConfigValue(xmlfile , "Service_ID");
                    //向用户标志服务的显示名称(可以重复)
                    _DisplayName = Get_ConfigValue(xmlfile, "Service_DisplayName");
                    //服务的说明(描述)
                    _Description = Get_ConfigValue(xmlfile, "Service_Description");
                }
                else
                {
                    throw new FileNotFoundException("未能找到服务名称配置文件 ChinaHN.XHService.exe.config!路径:" + xmlfile);
                }
               
            }
            /// <summary>
            /// 读取 XML中指定节点值
            /// </summary>
            /// <param name="configpath">配置文件路径</param>
            /// <param name="strKeyName">键值</param>        
            /// <returns></returns>
            protected static string Get_ConfigValue(string configpath, string strKeyName)
            {
                using (XmlTextReader tr = new XmlTextReader(configpath))
                {
                    while (tr.Read())
                    {
                        if (tr.NodeType == XmlNodeType.Element)
                        {
                            if (tr.Name == "add" && tr.GetAttribute("key") == strKeyName)
                            {
                                return tr.GetAttribute("value");
                            }
                        }
                    }
                }
                return "";
            }
            #endregion
            #endregion
    
            #region IDisposable 成员
            private bool disposed = false;
            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            protected virtual void Dispose(bool disposing)
            {
                if (!this.disposed)
                {
                    if (disposing)
                    {
                        //managed dispose 
                        _ServiceName = null;
                        _DisplayName = null;
                        _Description = null;
                    }
                    //unmanaged dispose 
                }
                disposed = true;
            }
            ~SettingHelper()
            {
                Dispose(false);
            }
            #endregion 
        }
    }
  • 相关阅读:
    C#_WinForm接收命令行参数
    SQLite不支持的SQL语法总结
    Thirft框架介绍
    jquery获取复选框的值
    REST构架风格介绍:状态表述转移
    RESTful HTTP的实践infoQ
    C#如何在webBrowser1控件通过TagName,Name查找元素(没有ID时)遍历窗体元素
    Html TO Ubb and Ubb TO Html
    SQL 位运算
    Memcached真的过时了吗?【转帖】
  • 原文地址:https://www.cnblogs.com/valor-xh/p/6732226.html
Copyright © 2020-2023  润新知