1,Windows服務應用程序是一種需要長期運行的應用程序,它對於服務器環境特別適合。它沒有用戶界面,並且也不會產生任何可視輸出。任何用戶消息都會被寫進Windows事件日志。計算機啟動時,服務會自動開始運行。它們不要用戶一定登錄才運行,它們能在包括這個系統內的任何用戶環境下運行。通過服務控制管理器,Windows服務是可控的,可以終止、暫停及當需要時啟動。
注:因任何消息都會寫到windows事件日志,故當服務啟動不了的時候如:“服務啟動後又停止了。一些服務自動停止 如果它們沒有什麼可做的”這種問題出現時,可打開控制面板-管理工具-事件查看器:查看應用程序的日志
2,創建方法:
1. 新建一個項目 從一個可用的項目模板列表當中選擇Windows服務
• OnStart – 控制服務啟動執行的代碼 • OnStop – 控制服務停止執行的代碼
2,添加安裝程序
1. 將這個服務程序切換到設計視圖
2. 右擊設計視圖選擇“添加安裝程序”
3. 切換到剛被添加的ProjectInstaller的設計視圖
4. 設置serviceInstaller1組件的屬性:
1) ServiceName = My Sample Service
2) StartType = Automatic
5. 設置serviceProcessInstaller1組件的屬性
1) Account = LocalSystem
NetworkService 在當前正使用 NetworkService 帳戶運行的提供程序宿主進程中激活提供程序。
LocalService 在當前正使用 LocalService 帳戶運行的提供程序宿主進程中激活提供程序。
LocalSystem 在當前正使用 LocalSystem 帳戶運行的提供程序宿主進程中激活提供程序。
6. 生成解決方案
3,安裝
1, 打開Visual Studio .NET命令提示
2. 改變路徑到你項目所在的bin\Debug文件夾位置(如果你以Release模式編譯則在bin\Release文件夾)
3. 執行命令“InstallUtil.exe MyWindowsService.exe”注冊這個服務,使它建立一個合適的注冊項。
或在.net framework的C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 執行:installutil 服務程序路徑+文件名.exe
4, 卸載用:installutil /u 服務程序路徑+文件名.exe
4,調試: 服務不能象普通應用程序那樣,只要簡單地在開發環境下執行就可以調試了。服務必須首先被安裝和啟動.
1. 安裝服務並啟動, 設置程序斷點
2. 點擊“調試”菜單
3. 點擊“進程”菜單
4. 確保 顯示系統進程 被選
5. 在 可用進程 列表中,把進程定位於你的可執行文件名稱上點擊選中它
6. 點擊 附加 按鈕
7. 點擊 確定
注:在第5步時若服務為灰色,附件上到….選擇中:調試以下代碼類型!
3, 定時器使用
1,命名空間 System.Timers; Timer _timer = new Timer();
2,方法及屬性
AutoReset 獲取或設置一個值,該值指示 Timer 是應在每次指定的間隔結束時引發 Elapsed 事件,還是僅在指定的間隔第一次結束後引發該事件。true時Elapsed定時執行,false執行一次停止
Enabled 獲取或設置一個值,該值指示 Timer 是否應引發 Elapsed 事件。
Interval 獲取或設置引發 Elapsed 事件的間隔。
定時事件:_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
private void OnTimedEvent(object source, ElapsedEventArgs e) { }
(2)控件添加
4,實例:定時插入文本
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;
using System.Timers;
namespace MyServices
{
public partial class Service1 : ServiceBase
{
string filePath = “F:\\temp.txt”;
static int i = 0;
Timer _timer = new Timer();
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_timer.AutoReset = true;
_timer.Interval = 2000;
_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
_timer.Start();
}
private void OnTimedEvent(object source, ElapsedEventArgs e) {
Stream fs = File.OpenWrite(filePath);
TextWriter sw = new StreamWriter(fs);
i++;
sw.WriteLine(i.ToString() + “, hi, this is my first Services”);
sw.Flush();
sw.Close();
}
protected override void OnStop()
{
Stream fs = File.OpenWrite(filePath);
TextWriter sw = new StreamWriter(fs);
sw.WriteLine(“panel !!!!!!!!!!!!!!!”);
sw.Flush();
sw.Close();
}
}
}