VS 中:VC# → Windows → Windows Service,命名與路徑確定。
Program.cs:入口。Service1.cs:無圖形界面,系統啟動自動加載,無需用戶登錄。需安裝並註冊表註冊。右鍵「查看代碼」見兩關鍵方法:
OnStart(string[] args):服務啟動執行邏輯。OnStop():服務停止執行邏輯。using System;
using System.Diagnostics;
using System.ServiceProcess;
using System.IO;
namespace WindowsService1 {
public partial class Service1 : ServiceBase {
int compuTime;
public Service1() { InitializeComponent(); }
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);
compuTime = Environment.TickCount;
long curTick = Environment.TickCount;
long diff = curTick - compuTime;
// 計算系統/應用運行時長...
sw.WriteLine(String.Format("本計算機已運行了 {0} 小時 {1} 分 {2} 秒", ...));
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(0, SeekOrigin.End);
sw.WriteLine("結束時間:" + DateTime.Now);
sw.WriteLine("************************************");
sw.Flush(); sw.Close();
}
}
}
設計器右鍵「添加安裝程序」生成 ProjectInstaller.cs,配置:
serviceProcessInstaller1.Account = LocalSystemserviceInstaller1.Description、DisplayName、StartType = AutomaticVS 命令提示符下:
installutil "D:\...\WindowsService1.exe"
DisplayName → 啟動/停止。C:\Log.txt 驗證輸出。installutil /u "路徑\WindowsService1.exe"修改代碼前必須先停止服務,否則重新生成會提示「exe 正在使用」。