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(),'a@b.com')";
                    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 = @"SYSTEM\CurrentControlSet\Services\" + 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

效果如图:

其他代码待续。。。。

 

转载于:https://www.cnblogs.com/SoftWareIe/p/9732760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值