標籤:inter name 服務安裝 也有 目錄結構 項目 gets path contain
一. 服務端
- 如—建立項目—經典案頭—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 = @"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
效果
其他代碼待續。。。。
VS2015 定時服務及控制端