Windows服务的配置与安装
2016-02-17 14:18
337 查看
因为当前项目需要使用到一个数据中间件,考虑到服务的稳定性与安全性便采用了Windows服务的方式寄宿推送服务。
创建windows服务首先需要新建一个Windows服务控件,位于常规>Windows服务中
修改完名称后单击添加windows服务,打开创建的windows服务控件代码层,我们可以看到如下原始代码:
完成上面两个步骤就基本完成了一个Windows服务的配置工作,接下来我们需要使用ManagedInstallerClass安装组件将服务安装到系统服务列表中,这里贴出一个通用的安装与卸载的公共类:
因为windows服务的启动方式和普通的窗体,控制台不同,所以我们需要在项目的Program类中进行判断当前启动的方式否则安装的服务将无法启动,首先判断启动类型是否为windows服务,如果是,则调用服务的方式运行自身的代码块,代码如下:
if ((!Platform.IsMono && !Environment.UserInteractive)//Windows Service
|| (Platform.IsMono && !AppDomain.CurrentDomain.FriendlyName.Equals(Path.GetFileName(Assembly.GetEntryAssembly().CodeBase))))//MonoService
{
RunAsService();
return;
}
上述代码中的QuteService即为我们之前新建的Windows服务的名称,完成以上全部配置后,我们就可以在需要的地方调用SelfInstaller.InstallMe();进行安装,或者调用SelfInstaller.UninstallMe();卸载
创建windows服务首先需要新建一个Windows服务控件,位于常规>Windows服务中
修改完名称后单击添加windows服务,打开创建的windows服务控件代码层,我们可以看到如下原始代码:
partial class QuoteService : ServiceBase { public QuoteService() { InitializeComponent(); } protected override void OnStart(string[] args) { } protected override void OnStop() { } }windows服务控件创建后默认为我们重写了两个方法,一个为OnStart一个为OnStop,对应的即为我们的services.msc列表里面的启动与停止事件,我们接下来就可以将需要寄宿服务的启动和停止方法填入这两个事件里面,列如:
partial class QuoteService : ServiceBase { private ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private QuoteSocket quote; public QuoteService() { InitializeComponent(); } protected override void OnStart(string[] args) { InitialService(); quote = new QuoteSocket(); quote.BindQuote("127.0.0.1", 5555); quote.Start(6666); } protected override void OnStop() { quote.Stop(); } private void InitialService() { log4net.Config.XmlConfigurator.Configure(new FileInfo(Environment.CurrentDirectory + @"\Config\log4net.xml")); log.Info("报价中间件启动"); } }修改完Windows服务控件中的代码绑定后,我们接下来就需要添加安装程序,我们单击我们之前添加的windows服务类,右击【设计】页面,找到【添加安装程序】然后会自动为我们生成ProjectInstaller.cs的安装配置信息,首先点开serviceProcessInstaller1>属性页面修改account(账户)为LocalSystem,然后点开serviceInstaller1修改Description(描述)为自定义服务描述信息,列如XXX公司服务,修改完成后保存。
完成上面两个步骤就基本完成了一个Windows服务的配置工作,接下来我们需要使用ManagedInstallerClass安装组件将服务安装到系统服务列表中,这里贴出一个通用的安装与卸载的公共类:
public static class SelfInstaller { private static readonly string _exePath = Assembly.GetExecutingAssembly().Location; public static bool InstallMe() { try { ManagedInstallerClass.InstallHelper(new string[] { _exePath }); } catch { return false; } return true; } public static bool UninstallMe() { try { ManagedInstallerClass.InstallHelper(new string[] { "/u", _exePath }); } catch { return false; } return true; } }
因为windows服务的启动方式和普通的窗体,控制台不同,所以我们需要在项目的Program类中进行判断当前启动的方式否则安装的服务将无法启动,首先判断启动类型是否为windows服务,如果是,则调用服务的方式运行自身的代码块,代码如下:
if ((!Platform.IsMono && !Environment.UserInteractive)//Windows Service
|| (Platform.IsMono && !AppDomain.CurrentDomain.FriendlyName.Equals(Path.GetFileName(Assembly.GetEntryAssembly().CodeBase))))//MonoService
{
RunAsService();
return;
}
static void RunAsService() { ServiceBase[] servicesToRun; servicesToRun = new ServiceBase[] { new QuoteService() }; ServiceBase.Run(servicesToRun); }
上述代码中的QuteService即为我们之前新建的Windows服务的名称,完成以上全部配置后,我们就可以在需要的地方调用SelfInstaller.InstallMe();进行安装,或者调用SelfInstaller.UninstallMe();卸载
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法