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盤下記錄系統運行時間和操作信息,當結束服務時,記錄結束的時間。
代碼如下:
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.IO;
namespace Windows
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
int compuTime;
//啓動時執行
protected override void OnStart(string[] args)
{
FileStream fs = new FileStream(@"C:/Log.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
sw.WriteLine("開始時間:" + DateTime.Now.ToString());
compuTime = Environment.TickCount;
long curTickValue = Environment.TickCount;
long difference = curTickValue - compuTime;
long computerHours, computerMinutes, computerSeconds;
long applicationHours, applicationMinutes, applicationSeconds;
computerHours = (curTickValue / (3600 * 999)) % 24;
computerMinutes = (curTickValue / (60 * 999)) % 60;
computerSeconds = (curTickValue / 999) % 60;
applicationHours = (difference / (3600 * 999)) % 24;
applicationMinutes = (difference / (60 * 999)) % 60;
applicationSeconds = (difference / 999) % 60;
sw.WriteLine(String.Format("本計算機已運行了 {0} 小時 {1} 分 {2} 秒", computerHours.ToString(), computerMinutes.ToString(), computerSeconds.ToString()));
sw.WriteLine(String.Format("本應用程序已運行了 {0} 小時 {1} 分 {2} 秒",
applicationHours.ToString(), applicationMinutes.ToString(),
applicationSeconds.ToString()));
sw.WriteLine("機器名稱:" + Environment.MachineName);
sw.WriteLine("系統版本:" + Environment.OSVersion);
sw.WriteLine("系統路徑:" + Environment.SystemDirectory);
sw.WriteLine("系統用戶名:" + Environment.UserName);
sw.WriteLine("系統.Net版本:" + Environment.Version);
sw.Flush();
fs.Close();
}
//停止
protected override void OnStop()
{
FileStream fs = new FileStream(@"c:/Log.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(10, SeekOrigin.End);
sw.WriteLine("結束時間:" + DateTime.Now.ToString());
sw.WriteLine("************************************");
sw.Flush();
sw.Close();
}
}
}
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服務沒有停止進程,確保停止重新再生成。