?
一.? 服務端
- 如下圖—新建項目—經典桌面—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();}
效果如圖:
其他代碼待續。。。。
?