1. 程式人生 > >C# Windows Service(Windows服務)相關

C# Windows Service(Windows服務)相關

安全模式 log mman ini 服務項目 寫入 exception ren all

https://www.cnblogs.com/charlie-chen2016/p/8031774.html

這是一個備份數據庫的服務,邏輯很簡單,就是通過定時器實現在特定的時間執行SQL語句備份數據庫,並將每一步操作的情況寫入日誌文件。

技術分享圖片
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Data.SqlClient; namespace DataBaseService { public partial class DataBakService : ServiceBase { public DataBakService() { InitializeComponent(); } //定時器 System.Timers.Timer tmBak = new System.Timers.Timer(); //服務器啟動時寫日誌、開啟定時器 protected override void OnStart(string[] args) { using (System.IO.StreamWriter sw = new
System.IO.StreamWriter("D:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " DATABASENAME Service Start."); } //到時間的時候執行事件 tmBak.Interval = 60000;//一分鐘執行一次 tmBak.AutoReset = true;//執行一次 false,一直執行true //是否執行System.Timers.Timer.Elapsed事件 tmBak.Enabled = true; tmBak.Start(); tmBak.Elapsed
+= new System.Timers.ElapsedEventHandler(SQLBak); } private void SQLBak(object source, System.Timers.ElapsedEventArgs e) { //如果當前時間是10點30分 if (DateTime.Now.Hour == 9 && DateTime.Now.Minute == 50) { string sql = string.Format(@" BACKUP DATABASE DATABASENAME TO DISK = N‘E:\DBBak\DATABASENAME {0}{1}{2}.bak‘--目錄一定要存在 WITH INIT , NOUNLOAD , NAME = N‘數據庫備份‘, --名字隨便取 NOSKIP , STATS = 10, NOFORMAT", DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day); try { using (System.IO.StreamWriter sw = new System.IO.StreamWriter("D:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 正在備份DATABASENAME 數據庫......"); } SqlConnection conn = new SqlConnection("server=127.0.0.1;uid=sa;pwd=44545454;database=DATABASENAME "); conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); cmd.CommandTimeout = 0; cmd.ExecuteNonQuery(); conn.Close(); } catch (Exception ex) { using (System.IO.StreamWriter sw = new System.IO.StreamWriter("D:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 備份DATABASENAME 數據庫出現異常:" + ex.Message); return; } } using (System.IO.StreamWriter sw = new System.IO.StreamWriter("D:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 備份DATABASENAME 數據庫成功!"); } } } //服務停止時寫日誌 protected override void OnStop() { using (System.IO.StreamWriter sw = new System.IO.StreamWriter("D:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " DATABASENAME Service Stop."); } } } }
View Code

服務命令:

技術分享圖片
安裝:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowService所在目錄\WindowService.exe
Net Start ServiceEFNETSYS
sc config ServiceEFNETSYS start= auto
卸載:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowService所在目錄\WindowService.exe

---如果需要查看腳本運行狀況,在腳本最後一行加入pause
View Code

安裝 InstallUtil.exe工具

打開cmd窗口分別執行
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe window服務所在目錄/windows服務.exe

sc命令
打開cmd窗口執行
sc create 服務名稱 binPath=“windows服務項目的bin\Release下.exe文件地址” start=auto binPath=後面有個空格

卸載 InstallUtil.exe工具

cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe -u window服務所在目錄/windows服務.exe

sc命令 sc delete 服務名稱

******************************************************************************

可以通過sc命令或者註冊表刪除服務名

命令行刪除windows系統服務辦法一:

用sc.exe這個Windows命令
開始——運行——cmd.exe,然後輸入sc就可以看到了。使用辦法很簡單:
sc delete "服務名" (如果服務名中間有空格,就需要前後加引號)
如針對上面的: sc delete KSD2Service

註冊表刪除windows系統服務方法二:

直接進行註冊表編輯(不推薦)
打開註冊表編輯器,找到下面的鍵值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 一般服務會以相同的名字在這裏顯示一個主健,直接刪除相關的鍵值便可。

PS:特殊情況

1、如果服務顯示的是rundll32.exe,並且這個文件是位於system32目錄下,那麽就不能刪除這個rundll32.exe文件,它是Windows系統的文件。這時只要清除相關的服務就可以了

2、如果一個服務刪除了馬上又自動建立了,說明後臺有進程在監視、保護。需要先在進程管理器中殺掉相應的進程,或者啟動後按F8,到安全模式下刪除。

C# Windows Service(Windows服務)相關