一. 服务端
- 如下图—新建项目—经典桌面—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();}
效果如图:
其他代码待续。。。。