VS2015 定时服务及控制端

Posted softwareie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2015 定时服务及控制端相关的知识,希望对你有一定的参考价值。

 

一.  服务端

  1. 如下图—新建项目—经典桌面—Windows服务—起名svrr

         技术分享图片

 

        2. 打到server1 改名为svrExecSqlInsert 右击对应的设计界面,添加安装服务目录结构如图

          技术分享图片技术分享图片 

        3. svrExecSqlInsert里有打到OnStart()方法开始写代码如下 

        /// <summary>
        /// 服务开启操作
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            Timer tmInsert = new Timer();
            tmInsert.Interval = 5000;//5秒的定时器
            tmInsert.Elapsed += TmInsert_Elapsed;
            tmInsert.Enabled = true;
        }

        /// <summary>
        /// 定时执行数据库插入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TmInsert_Elapsed(object sender, ElapsedEventArgs e)
        {
            using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=123;database=oa"))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    con.Open();
                    cmd.Connection = con;
                    cmd.CommandText = @"insert into UserInfo(UserName,Password,dutyid,RegTime,email)
                                       values(‘test‘,‘123‘,0,GETDATE(),‘[email protected]‘)";
                    cmd.CommandType = CommandType.Text;
                    cmd.ExecuteNonQuery();

                }

            }
        }

到现在服务端就完成了 选通过命令安装后 看看数据库中的变化 已经生成了很多数据了

         技术分享图片   

二.  服务控制端 有时我们同一个服务可能通过配置文件等对不同实例的数据库进行操作而服务又要安在同一台电脑上,不要说用的人员了就是.net开发的人员对这一些命令也有点头大,那么就有了控制断,这个先建一个窗体应用程序

          技术分享图片

         1. 将form1改为frmMain 放一个menuStrip 管理服务(安装、卸载、刷新)、操作服务(启动、停止)、退出 再加一下dataGridView Dock=fill

         2. 增加一个ServiceInfo类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SvrUI
{
   public class ServerInfo
    {
        public string SvrName { get; set; }
        public string SvrDisplayName { get; set; }
        public string SvrDescription { get; set; }
        public string SvrPath { get; set; }
    }
}

3在frmMain窗体中加入如下代码来显示计算机中的服务列表 如果要显示自己安装的服务可通过安半时限制服务前缀或后缀过滤一下

技术分享图片
 public frmMain()
        {
            InitializeComponent();
            IniControls();
            IniData();
        }
        /// <summary>
        ///1. 添加控件
        /// </summary>
        private void IniControls()
        {
            DataGridViewCell cellTemple = new DataGridViewTextBoxCell();
            dataGridView1.Columns.AddRange(new DataGridViewColumn[] {
                new DataGridViewTextBoxColumn() { Name="SvrName",HeaderText="服务名称",DataPropertyName="SvrName",CellTemplate=cellTemple },
                new DataGridViewTextBoxColumn() { Name="SvrDisplayName",HeaderText="服务显示名称",DataPropertyName="SvrDisplayName",CellTemplate=cellTemple},
                new DataGridViewTextBoxColumn() { Name="SvrDescription",HeaderText="服务描述名称",DataPropertyName="SvrDescription",CellTemplate=cellTemple},
                new DataGridViewTextBoxColumn() { Name="SvrStatus",HeaderText="服务状态",DataPropertyName="SvrStatus",CellTemplate=cellTemple},
                new DataGridViewTextBoxColumn() { Name="SvrPath",
                    HeaderText ="服务路径",DataPropertyName="SvrPath",CellTemplate=cellTemple,AutoSizeMode= DataGridViewAutoSizeColumnMode.Fill}
            });
        }

        /// <summary>
        ///2. 初始化数据
        /// </summary>
        private void IniData()
        {
            //显示服务列表 如果只控制自己安装的服务 可以在安装时限制显示的名称 如显示名称必须包含MySvr:
            // var svrs = ServiceController.GetServices().Where(svr=>svr.DisplayName.Contains("MySvr"));
            var svrs = ServiceController.GetServices();//显示电脑的全部服务


            List<ServiceInfo> lst = new List<ServiceInfo>();
            foreach (var svr in svrs)
            {
                string description = "";
                string cpath = GetWindowsServiceInstallPath(svr.ServiceName, out description);
                lst.Add(new ServiceInfo() { SvrName = svr.ServiceName, SvrDisplayName = svr.DisplayName, SvrStatus = svr.Status.ToString(), SvrDescription = description, SvrPath = cpath });

            }

            dataGridView1.DataSource = lst;


        }

        /// <summary>
        /// 获取服务安装路径
        /// </summary>
        /// <param name="ServiceName"></param>
        /// <returns></returns>
        public string GetWindowsServiceInstallPath(string ServiceName, out string description)
        {
            string key = @"SYSTEMCurrentControlSetServices" + ServiceName;
            string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString();
            description = (Registry.LocalMachine.OpenSubKey(key).GetValue("Description") ?? "").ToString();
            //替换掉双引号   
            path = path.Replace(""", string.Empty);
            return path;
        }


        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }
View Code

效果如图:

技术分享图片

其他代码待续。。。。

 

以上是关于VS2015 定时服务及控制端的主要内容,如果未能解决你的问题,请参考以下文章

VS2015使用技巧 打开代码片段C#部分

vs2015 windows服务怎么安装

Linux-- 定时服务crond VS anacron和 crontab VS anacrontab区别对比

vs2003:快速片段工具

VS Code中的调试怎么用

VS2015编译GEOS的debug和release版本