来源: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('\\') + ) + "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#:安装Windows服务,动态指定服务名及描述(转载)的更多相关文章

  1. C#:安装Windows服务,动态指定服务名及描述

    Installer.cs>> public Installer() { InitializeComponent(); /* 服务未注册前,System.Configuration.Conf ...

  2. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之三:安装Windows活动目录域服务

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  3. c#开发的程序安装时动态指定windows服务名称

    转自:http://www.jb51.net/article/30549.htm 前段时间由于项目的需求,要在Windows里把同样的组件制作成多个不同名称的服务,这些服务完成类似的功能,仅需要修改业 ...

  4. C#代码安装Windows服务(控制台应用集成Windows服务)

    最近在为一款C/S架构的科研软件开发云计算版,需要用到WCF,考虑到不需要什么界面以及稳定性,无人值守性,准备用Windows Service作为宿主,无奈Windows Service的安装太为繁复 ...

  5. Windows下当地RabbitMQ服务的安装

    Windows下本地RabbitMQ服务的安装 本文参考:刘若泽相关技术文档 当然这些内容页可以通过RabbitMQ官方网站获得. RabbitMQ配置说明手册 一.RaibbitMQ服务器配置 1. ...

  6. 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习

    反射实现Model修改前后的内容对比   在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...

  7. 大数据学习day11------hbase_day01----1. zk的监控机制,2动态感知服务上下线案例 3.HDFS-HA的高可用基本的工作原理 4. HDFS-HA的配置详解 5. HBASE(简介,安装,shell客户端,java客户端)

    1. ZK的监控机制 1.1 监听数据的变化  (1)监听一次 public class ChangeDataWacher { public static void main(String[] arg ...

  8. 安装windows服务批处理代码

    批处理是DOS时代比较常用的方法之一,目前来说也是一种高效的方法,复制代码到文本文件中,保存并修改文件扩展名为“*.bat”. 安装windows服务批处理代码如下: @echo off set fi ...

  9. .NET 创建Windows服务,及服务的安装卸载

    .NET服务创建过程 http://jingyan.baidu.com/article/fa4125acb71a8628ac709226.html 相关命令(要以管理员身份打开cmd) 安装服务 -& ...

随机推荐

  1. Jmeter创建一个 JMS 主题的测试计划

    新建一个 JMS 主题的测试计划 JMS 需要下载一些可选的jar 文件.详细信息请参阅 第一章:新手入门.在本章节,将学习如何创建测试计划来测试JMS提供程序.创建5个订阅者和1个发布者.创建2个线 ...

  2. ActiveMQ安装及使用

    1 安装环境 1.需要jdk2.安装Linux系统.生产环境都是Linux系统. 2 安装步骤 第一步: 把ActiveMQ 的压缩包上传到Linux系统.第二步:解压缩. 第三步:关闭防火墙 临时关 ...

  3. bash切割文件

    split -l 100 ./x01.txt -d -a 3 --additional-suffix=.txt 将 x01.txt文件,-l 100 按照每个100行,  -d 以数字累加, -a 3 ...

  4. SQL语句实现不存在即插入,存在则increase某字段的功能insert into … on duplicate key update

    前提条件:必须是唯一主键: CREATE UNIQUE INDEX idx_vote_object ON test_customers_vote (`vote_object`, `vote_objec ...

  5. 【c++】友元

    c++引入友元的原因 在某些情况下,允许特定的非成员函数访问类的私有成员.在类中以关键字friend开始(只能出现在类定义的内部),声明为友元的可以为类.类的成员函数.普通的非成员函数. 速览 #in ...

  6. 关于cmder 目录右键打开当前目录的方法

    在 Cmder 目录直接运行 cmder /register user或者cmder /register all

  7. jQuery Ajax实例 ($.ajax_$.post_$.get)

    Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了. $.post.$.get是一些简单的方法,如果要处理复杂的逻辑,还是需要用到j ...

  8. JS实现最短路径之弗洛伊德(Floyd)算法

    弗洛伊德算法是实现最小生成树的一个很精妙的算法,也是求所有顶点至所有顶点的最短路径问题的不二之选.时间复杂度为O(n3),n为顶点数. 精妙之处在于:一个二重初始化,加一个三重循环权值修正,完成了所有 ...

  9. Docker学习(四): 操作容器

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  10. 创建Web项目运行时出小错误及解决方法

    1.目录结构 2.各文件内容 index.jsp <%@ page contentType="text/html;charset=UTF-8" language=" ...