C#:安裝Windows服務,動態指定服務名及描述


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 
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM