C#(VS2008)服务编写-安装和部署

1.创建一个空白解决方案。

2.在解决方案下面添加两个Windows服务:WXSmsGuardNew(保护服务),WXSmsMainNew(主服务).

3.第一个服务作为保护服务,服务上添加两个控件:System.Timers.Timer和System.ServiceProcess.ServiceController

由于System.Timers.Timer不会显示在工具栏中无法直接拖到服务中,故而我们找到服务设计器页面WXSmsGuardNew.Designer.cs,将手动构造System.Timers.Timer控件

        #region 组件设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.timer1 = new System.Timers.Timer();
            this.sc = new System.ServiceProcess.ServiceController();
            ((System.ComponentModel.ISupportInitialize)(this.timer1)).BeginInit();
            //
            // timer1
            //
            this.timer1.Enabled = true;
            this.timer1.Interval = 1000;
            this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
            //
            // sc
            //
            this.sc.ServiceName = "WXSmsGuardNew";
            //
            // WXSmsGuardNew
            //
            this.ServiceName = "WXSmsGuardNew";
            ((System.ComponentModel.ISupportInitialize)(this.timer1)).EndInit();

        }

        #endregion

        private System.Timers.Timer timer1;
        private System.ServiceProcess.ServiceController sc;

将 ServiceController控件的属性Name改为"sc",ServiceName改为"WXSmsMainNew",因为着这个控件是跟踪主服务用的所以设置为主服务的服务名

保护服务中,Timer监控主服务运行状态

        public WXSmsGuardNew()
        {
            //验证服务器证书回调自动验证
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(RemoteCertificateValidate);
            InitializeComponent();
        }
        public bool RemoteCertificateValidate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {   // 总是接受
            return true;
        }
        protected override void OnStart(string[] args)
        {
            WriteLog("保护服务已开启");
        }

        protected override void OnStop()
        {
            WriteLog("保护服务已关闭");
        }

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            timer1.Enabled = false;
            sc.Refresh();
            if (sc.Status != ServiceControllerStatus.Running)
            {
                sc.Start();
                WriteLog("发现发送已关闭,已经开启");
            }
            timer1.Enabled = true;
        }

主服务则负责专门做需要做的事情,如实时发送短信,或者其他逻辑

public WXSmsMainNew()
        {
            //验证服务器证书回调自动验证
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(RemoteCertificateValidate);
            InitializeComponent();
        }
        public bool RemoteCertificateValidate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {   // 总是接受
            return true;
        }
        protected override void OnStart(string[] args)
        {
            WriteLog("发送服务已开启");
        }

        protected override void OnStop()
        {
            WriteLog("发送服务已关闭");
        }

        #region 获取参数
        public string GetConfig(string key)
        {
            return ConfigurationManager.AppSettings[key];
        }

        public string GetConfig(int index)
        {
            return ConfigurationManager.ConnectionStrings[index].ConnectionString;
        }

        public int GetConfigCont()
        {
            return ConfigurationManager.ConnectionStrings.Count;
        }
        #endregion

        #region timer 事件
        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            timer1.Enabled = false;

            int num = GetConfigCont();
            for (int i = 1; i < num; i++)
            {
                SendSms ssms = new SendSms();
                bool b = ssms.SendWX(GetConfig(i));
                if (!b)
                {
                    this.Stop();
                }
            }

            timer1.Enabled = true;
        }
        #endregion

辅助方法,记录日志

        #region 写日志
        /// <summary>
        /// 写日志
        /// </summary>
        /// <param name="msg">日志内容</param>
        public void WriteLog(string msg)
        {
            string path = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + "\\log\\";
            Directory.CreateDirectory(path);
            for (int i = 1; ; i++)
            {
                string fileName = string.Format("{0}WXSendServer{1}-{2}.txt", path, DateTime.Now.ToString("yyyyMMdd"), i);
                if (File.Exists(fileName))
                {
                    FileInfo fileInfo = new FileInfo(fileName);
                    if (fileInfo.Length >= 2048 * 1024)//>=2M
                    {
                        continue;
                    }
                }
                string msgInfo = string.Format("{0} {1}\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msg);
                File.AppendAllText(fileName, msgInfo);
                break;
            }
        }
        #endregion

以上完成了代码编写。

4.然后配置安装及服务信息

在两个服务的设计界面点鼠标右键有个"添加安装程序",点击之后会生成ProjectInstaller.cs文件,将此文件自动生成的控件于服务相对应

5.安装和部署

解决方案添加安装项目

在安装项目上右键--视图--文件系统中,右键--添加--项目输出,将两个服务均作为主输出添加进去

然后在安装项目上右键--视图--自定义操作,将两个主输出均添加到对应的步骤下.

最后,生成安装项目,会在安装项目的目录下生成两个文件,安装其中任何一个均可

时间: 2024-12-29 10:13:48

C#(VS2008)服务编写-安装和部署的相关文章

java自动化测试成长日记-之CVS客户端和服务端安装和部署1:CVS服务端的配置和基本使用

CVS服务端的配置和基本使用 在做java自动化测试集成环境搭建的时候,无论怎样,你都会选择一个源代码管理工具,如:SVN,CVS,VSS等:但如果你使用Eclipse工具,建议你使用CVS源代码管理工具,因为它本身就自带了CVS客户端插件,可以直接使用(具体使用情况,可参考:java自动化测试成长日记-之CVS客户端和服务端安装和部署2:CVS客户端的配置和基本使用章节): 首先,你需要下载:cvsnt-2.5.03.2151安装包.msi,服务端安装软件(可在百度里面搜索找到,相应的资源).

openstack-mitaka之镜像服务管理安装配置部署

1.以root用户登陆,创建glance数据库,并为glance数据库授权 2.加载admin-openrc环境变量,用户证书 3.创建服务证书需要完成如下操作: 1)创建glance用户 2)添加 admin 角色到 glance 用户和 service 项目上. 3)创建glance服务实体 4.创建镜像服务的 API 端点: 5.安装glance软件包 6.编辑/etc/glance/glance-api.conf,具体配置如下: 1)[database]配置如下(系统文件的641行左右)

openstack-mitaka之计算服务管理安装配置部署(计算节点安装部署)

对于计算服务,计算节点在配置以前,需要做如下操作 1.修改hosts文件 2.关闭Linux防火墙,firewalld.SELINUX服务,并将iptables.firewalld设置开机关闭 3.安装相应的软件包,并做时间同步 4.开始安装计算服务所需的软件包 5.编辑相关的配置文件/etc/nova/nova.conf 1)在[DEFAULT]设置rabbitMQ消息连接.配置认证服务访问.配置my_ip.配置neutron以及使用驱动: 2)在[oslo_messaging_rabbit]

Squid 服务的安装及部署

squid 作为一款服务器代理工具,可以缓存网页对象,减少重复请求,从而达到加快网页访问速度,隐藏客户机真实IP,更为安全.squid的工作机制:当我们客户机通过squid代理去访问web页面时,指定的代理服务器会先检查自己的缓存,若是缓存中有我们客户机需要的页面,那么squid服务器将直接把缓存中的页面内容返回给客户机,如果缓存中没有客户端请求的页面,那么squid代理服务器就会向internet发送访问请求,获得返回的web页面后,将网页的数据保存到缓存中并发送给客户机. 由于客户机的web

通过跳板机建立信任,对多个tomcat服务统一安装部署(shell编写)

=========================================================== conf : 录入服务器IP.安装路径后,脚本自动获取需要修改配置.每个服务提供一个配置文件,方便管理与扩展. bin : 提供总执行与单一执行脚本,脚本通过自动化获取配置,便于维护与扩展. bak : 保留获取原配置文件,便于问题分析. temp : 临时文件将及时删除无任何冗积. tools: 常用配置与通用文件处理写入统一函数,具体服务只需调用. new : 服务器交互文

十五.编写自动脚本部署web,反向代理,nfs服务

一.自动部署web,反向代理,加权轮询: 1.编写脚本自动部署反向代理,web,nfs. #!/bin/bash #author/dengsiyuan function nginx_check()  #配置nginx { ngx_status= 'ps aux|grep -v grep|grep -c nginx' #取运行nginx进程的进程数 if [ -f /etc/nginx/nginx.conf ];then   #判断是否存在正规文件nginx.conf以判断nginx是否安装 ec

Windows Server 2012 R2 WDS部署服务之一安装

WDS概念: Windows Deploy Services (windows 部署服务)在企业中实现操作系统自动部署 WDS安装条件: WDS需要域环境,DNS服务器,DHCP服务器,因为Windows部署服务使用的预启动执行环境 (PXE) 依靠 DHCP 进行 IP 寻址.另外,WDS服务器的分区必须是NTFS格式 WDS实验环境: 2012dc1:DC,DHCP,DNS以及WDS都安装在这台server上 下面开始,首先启动服务器管理器,添加角色 选择在2012dc1上安装角色 由于之前

OpenStack 控制节点基本环境和身份验证服务的安装部署

OpenStack Networking(neutron) 需要一个控制节点(controller node).一个网络节点(networknode)以及至少一个计算节点(compute node). 一.物理环境部署 1.物理环境规划 表1.1. OpenStack环境部署 二.安装前的部署 1.1配置主机名 [email protected]:~# vim  /etc/hostname controller 1.2 配置IP地址 [email protected]:~# vim  /etc/

编写Windows服务疑问2:探索服务与安装器的关系

首先,来弄两个服务,一个叫“飞机”,一个叫“火车”. public class FeiJiService : ServiceBase { public FeiJiService() { ServiceName = "Fei_ji"; } } public class HuoCheService : ServiceBase { public HuoCheService() { ServiceName = "Huo_che"; } } 用于演示,服务很单,接着,匹配安装