C#開發(fā)Windows服務實例之實現(xiàn)禁止QQ運行
本實例主要實現(xiàn)下面三個基本功能
1、C#開發(fā)windows服務
2、禁止QQ等程序運行
3、為windows服務創(chuàng)建自動安裝程序
下面針對這三個基本功能進行實現(xiàn)
一、C#開發(fā)windows服務
Windows服務在VS以前的版本中叫NT服務,在VS.NET啟用了新的名稱。用C#創(chuàng)建windows服務不是一件困難的事,下頁針對服務創(chuàng)建、啟動、停止做詳細介紹
1、首先在vs中添加一winform程序KillService
2、在解決方案添加新項中添加Windows服務
3、打開服務頁面,切換至代碼頁面有兩個方法如下:
protected override void OnStart(string[] args)
{
// TODO: 在此處添加代碼以啟動服務。
}
protected override void OnStop()
{
// TODO: 在此處添加代碼以執(zhí)行停止服務所需的關(guān)閉操作。
}
當服務啟動之后一般會要求每隔幾秒或者幾分鐘刷新一次數(shù)據(jù),所以要用到一個定時器,在定時器里邊進行業(yè)務操作。windows服務不能直接在VS下進行調(diào)試,所以可以選擇使用日志形式記錄服務的各種啟動停止或者異常的狀態(tài)。具體實現(xiàn)代碼如下:
partial class Service1 : ServiceBase
{
static System.Timers.Timer oTimer_Get = new System.Timers.Timer();
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// TODO: 在此處添加代碼以啟動服務。
AutoLog = false;
FileLog.Success("服務已啟動");
oTimer_Get.Enabled = true;
oTimer_Get.Interval = 10000;
oTimer_Get.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
}
private void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs e)
{
FileLog.Success("開始發(fā)送");
oTimer_Get.Enabled = false;
try
{
//此處可進行編寫詳細的業(yè)務操作
}
catch (Exception ex)
{
FileLog.Error(ex.Source + "。" + ex.Message);
}
oTimer_Get.Enabled = true;
FileLog.Success("結(jié)束發(fā)送");
}
protected override void OnStop()
{
// TODO: 在此處添加代碼以執(zhí)行停止服務所需的關(guān)閉操作。
FileLog.Success("服務已停止");
oTimer_Get.Enabled = false;
}
}
文件記錄類代碼
/// <summary>
/// 文件型日志記錄
/// </summary>
public static class FileLog
{
private static string sFilePath = System.Configuration.ConfigurationSettings.AppSettings["UserLog"];
/// <summary>
/// 錯誤日志
/// </summary>
/// <param name="Message">錯誤內(nèi)容</param>
public static void Error(string Message)
{
try
{
if (!Directory.Exists(sFilePath))
{
Directory.CreateDirectory(sFilePath);
}
string sFileName = sFilePath + "\\" + string.Format("{0}-Error.txt", DateTime.Now.ToString("yyyy-MM-dd"));
string sContent = string.Format("{0}-- {1}\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Message);
FileStream fs = new FileStream(sFileName, FileMode.Append);
Byte[] b = Encoding.Default.GetBytes(sContent);
fs.Write(b, 0, b.Length);
fs.Close();
}
catch { }
}
/// <summary>
/// 正確日志
/// </summary>
/// <param name="Message">正確內(nèi)容</param>
public static void Success(string Message)
{
try
{
if (!Directory.Exists(sFilePath))
{
Directory.CreateDirectory(sFilePath);
}
string sFileName = sFilePath + "\\" + string.Format("{0}-Success.txt", DateTime.Now.ToString("yyyy-MM-dd"));
string sContent = string.Format("{0}-- {1}\r\n", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Message);
FileStream fs = new FileStream(sFileName, FileMode.Append);
Byte[] b = Encoding.Default.GetBytes(sContent);
fs.Write(b, 0, b.Length);
fs.Close();
}
catch { }
}
}
4、服務需要一個啟動入口,打開program.cs文件在main函數(shù)里邊編寫入口代碼如下:
static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] {
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
}
到此windows服務編寫完成,但是現(xiàn)在該服務沒有什么的業(yè)務操作功能。接下來實現(xiàn)禁止本機QQ程序運行功能
二、禁止QQ等程序運行
只需獲取本機所有運行的進行,通過Process.kill()方法結(jié)束該進程即可
Process[] process = Process.GetProcesses();
for (int i = 0; i < process.Length; i++)
{
if (process[i].ProcessName == "QQ")
{
process[i].Kill();
}
}
將該操作放至windows服務中的業(yè)務操作模塊即可。
三、為windows服務創(chuàng)建自動安裝程序
上面實現(xiàn)了windows服務基本的業(yè)務操作功能,下面為該windows服務創(chuàng)建自動安裝程序,
1、切換至service.cs設計頁面,右鍵選擇添加安裝程序
2、這時項目中就添加了一個新類 ProjectInstaller 和兩個安裝組件 ServiceProcessInstaller 和 ServiceInstaller,并且服務的屬性值被復制到組件。
3、若要確定如何啟動服務,請右鍵 ServiceInstaller1屬性并將 StartType 屬性設置為適當?shù)闹怠?/P>
Manual 服務安裝后,必須手動啟動。Automatic 每次計算機重新啟動時,服務都會自動啟動。Disabled 服務無法啟動。
4、將serviceProcessInstaller類的Account屬性改為 LocalSystem這樣,不論是以哪個用戶登錄的系統(tǒng),服務總會啟動。
這些windows服務的安裝程序已經(jīng)完成。通過從生成菜單中選擇生成來生成項目。
注意 不要通過按 F5 鍵來運行項目——不能以這種方式運行服務項目。
5、創(chuàng)建啟動和停止文件
安裝文件Install.bat實現(xiàn)如下:
cd %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe KillService.exe
Net Start 自動查殺服務
sc config 自動查殺服務 start= auto
KillService.exe是你生成的可執(zhí)行文件的路徑
自動查殺服務是windows服務的名稱
停止文件Uninstall.bat文件的實現(xiàn)如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u KillService.exe
KillService.exe是你生成的可執(zhí)行文件的路徑
PS:當這兩個文件保存成功之后,執(zhí)行時一定要“以管理員身份運行”,否則服務啟動出錯
如果服務安裝成功,可以在資源管理器中的服務查看到正在運行的自動查殺服務。
至此整個實例基本完成
- C#基于Windows服務的聊天程序(1)
- 使用C#創(chuàng)建Windows服務的實例代碼
- C#使用windows服務發(fā)送郵件
- C#添加Windows服務 定時任務
- C#版Windows服務安裝卸載小工具
- C#通過創(chuàng)建Windows服務啟動程序的方法詳解
- C#使用windows服務開啟應用程序的方法
- 基于C#實現(xiàn)Windows服務狀態(tài)啟動和停止服務的方法
- c#使用windows服務更新站點地圖的詳細示例
- c#創(chuàng)建windows服務入門教程實例
- c# 在windows服務中 使用定時器實例代碼
- c#創(chuàng)建windows服務(Windows Services)詳細步驟
- C#編寫Windows服務實例代碼
- C#啟動和停止windows服務的實例代碼
- C#啟動windows服務方法的相關(guān)問題分析
- c#開發(fā)的程序安裝時動態(tài)指定windows服務名稱
- C#編寫Windows服務程序詳細步驟詳解(圖文)
相關(guān)文章
c# DataTable與不同結(jié)構(gòu)實體類轉(zhuǎn)換的方法實例
這篇文章主要介紹了c#的DataTable與不同結(jié)構(gòu)實體類轉(zhuǎn)換的方法實例,在大數(shù)據(jù)量的情況下很實用,大家可以參考使用2013-11-11C#實現(xiàn)主窗體最小化后出現(xiàn)懸浮框及雙擊懸浮框恢復原窗體的方法
這篇文章主要介紹了C#實現(xiàn)主窗體最小化后出現(xiàn)懸浮框及雙擊懸浮框恢復原窗體的方法,涉及C#窗體及鼠標事件響應的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08c#將字節(jié)數(shù)組轉(zhuǎn)成易讀的字符串的實現(xiàn)
這篇文章主要介紹了c#將字節(jié)數(shù)組轉(zhuǎn)成易讀的字符串的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-01-01