1.新建windows服務項目:
在VSIDE中點擊新建項目中VC#下--windows中--windows服務--改變項目命名,選中項目路徑--確定。
2.介紹文件構成:
創建後項目中會自動帶有Program.cs和Service1.cs,Service1是沒有圖形化界面的,這是因為windows服務基本都是沒有界面的,系統運行後就加載的這些服務程序,系統啟動時 便開始運行,不需要用戶登錄,windows服務需要安裝並在注冊表中進行注冊。
點擊Service1界面右鍵“查看代碼”或點擊“單擊此處切換到代碼視圖”,代碼中會出現2個重要的方法,一個 protected override void OnStart(string[] args){}方法,用於處理windows服務啟動後將運行的程序。一個 protected override void OnStop(){}方法,用於處理windows服務停止後將運行的程序。
3.編寫windows服務程序
下面我們就來編寫一個windows服務,當開啟這個服務時,將在C盤下記錄系統運行時間和操作信息,當結束服務時,記錄結束的時間。
代碼如下:
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Diagnostics;//進程的命名空間
6 using System.Linq;
7 using System.ServiceProcess;
8 using System.Text;
9 using System.IO;//引入文件流的命名空間
10
11 namespace WindowsService1
12 {
13 public partial class Service1 : ServiceBase
14 {
15 public Service1()
16 {
17 InitializeComponent();
18 }
19
20
21 int compuTime;
22 //啟動時執行
23 protected override void OnStart(string[] args)
24 {
25 FileStream fs = new FileStream(@"c:\Log.Txt",FileMode.OpenOrCreate,FileAccess.Write);
26 StreamWriter sw = new StreamWriter(fs);
27 sw.BaseStream.Seek(0, SeekOrigin.End);
28 sw.WriteLine("開始時間:" + DateTime.Now.ToString());
29
30
31 compuTime = Environment.TickCount;
32
33 long curTickValue = Environment.TickCount;
34 long difference = curTickValue - compuTime;
35
36 long computerHours, computerMinutes, computerSeconds;
37 long applicationHours, applicationMinutes, applicationSeconds;
38
39
40 computerHours = (curTickValue / (3600 * 999)) % 24;
41 computerMinutes = (curTickValue / (60 * 999)) % 60;
42 computerSeconds = (curTickValue / 999) % 60;
43
44 applicationHours = (difference / (3600 * 999)) % 24;
45 applicationMinutes = (difference / (60 * 999)) % 60;
46 applicationSeconds = (difference / 999) % 60;
47
48 sw.WriteLine (String.Format("本計算機已運行了 {0} 小時 {1} 分 {2} 秒", computerHours.ToString(), computerMinutes.ToString(),computerSeconds.ToString()));
49
50
51 sw.WriteLine (String.Format("本應用程序已運行了 {0} 小時 {1} 分 {2} 秒",
52 applicationHours.ToString(), applicationMinutes.ToString(),
53 applicationSeconds.ToString()));
54
55 sw.WriteLine("機器名稱:" + Environment.MachineName);
56 sw.WriteLine("系統版本:" + Environment.OSVersion);
57 sw.WriteLine("系統路徑:" + Environment.SystemDirectory);
58 sw.WriteLine("系統用戶名:" + Environment.UserName);
59 sw.WriteLine("系統.Net版本:" + Environment.Version);
60
61
62 sw.Flush();
63 fs.Close();
64 }
65
66 //停止
67 protected override void OnStop()
68 {
69 FileStream fs = new FileStream(@"c:\Log.Txt", FileMode.OpenOrCreate, FileAccess.Write);
70 StreamWriter sw = new StreamWriter(fs);
71 sw.BaseStream.Seek(10,SeekOrigin.End);
72 sw.WriteLine("結束時間:" + DateTime.Now.ToString());
73 sw.WriteLine("************************************");
74 sw.Flush();
75 sw.Close();
76 }
77 }
78 }
79
4.添加安裝程序
在Service1視圖界面點擊右鍵“添加安裝程序”,將會生成兩個組件,分別設置安裝組件的屬性。
serviceProcessInstaller1組件修改一個屬性
Account屬性改為:LocalSystem
serviceInstaller1組件修改三個屬性
Description屬性可以填寫描述windows服務的內容,如我的windows服務;
DisplayName 屬性填寫windows服務的服務名稱 如MywindowsService;
StartType屬性改為Automatic;//手工對服務進行操作
5.生成項目
生成項目調試錯誤,直至提示生成成功,到項目所在的文件夾下確認以及生成exe可執行文件,如我的項目創建在D:\msd0902練習\WindowsService1\bin\Debug下,以及成功生成了WindowsService1.exe。
6.在系統中安裝windows服務。
在開始菜單打開.Net Framework SDK或VS Tools中的命令行程序將出現黑屏下的命令行語句,在VC>後寫下installutill命令,然後打空格,再寫上你的windows服務的生成目錄及“\”和windows服務的執行命令的文件名,最後按回車鍵。
如 installutil "D:\msd0902練習\WindowsService1\bin\Debug\WindowsService1.exe"
提示成功後,及表示注冊成功。
7.開啟服務,查看程序運行效果。
在控制面板-- 管理工具--- 服務中找到windows服務的服務名稱如MywindowsService,右鍵啟動服務,啟動後,可以到C盤下找到Log.txt文件,如果你沒有找到,說明你前面的過程有錯誤,請重新進行一遍。
打開文件後,執行的效果是:
本計算機已運行了 1 小時 16 分 44 秒
本應用程序已運行了 0 小時 0 分 0 秒
機器名稱:977D914A3540495
系統版本:Microsoft Windows NT 5.1.2600 Service Pack 3
系統路徑:C:\WINDOWS\system32
系統用戶名:LOCAL SERVICE
系統.Net版本:2.0.50727.1433
8. 停止服務,查看程序運行效果
在服務中找到windows服務的服務名稱如MywindowsService,右鍵停止服務,停止後,查看c盤下Log.txt文件,打開文件後,執行的效果是:
本計算機已運行了 1 小時 16 分 44 秒
本應用程序已運行了 0 小時 0 分 0 秒
機器名稱:977D914A3540495
系統版本:Microsoft Windows NT 5.1.2600 Service Pack 3
系統路徑:C:\WINDOWS\system32
系統用戶名:LOCAL SERVICE
系統.Net版本:2.0.50727.1433
結束時間:2009-6-26 14:14:53
*********************************
9.卸載windows服務
無用的windows服務,我們應該停止服務,以免占內存,現在將我們的windows服務在開始菜單打開.Net Framework SDK或VS Tools中的命令行程序將出現黑屏下的命令行語句,在VC>後打入installutil "D:\msd0902練習\WindowsService1\bin\Debug\WindowsService1.exe" /u 然後按回車鍵,提示卸載成功,我們的windows服務就成功卸載了。
10.修改windows服務
對已經生成過的windows服務代碼進行修改時,首先要停止此windows服務,然後修改代碼後,重新生成即可,如提示“…exe…正在使用”說明你的windows服務沒有停止進程,確保停止重新再生成。
本文出自 “葉子文文” 博客,轉載請與作者聯系!