Windows服務程式實現定時操作【轉載】

來源:互聯網
上載者:User

建立Windows服務程式實現定時操作
Posted on 2011-01-10 17:31 孤獨者 閱讀(692) 評論(9) 編輯 收藏
   在項目開發中,我們可能有這樣的需求,就是每隔一段時間,由系統來執行自己預先定義好的一些任務,比如說每隔多久檢查一下系統中是否有待發送的郵件,隨時監控一些檔案的操作等,我們可以通過建立Windows服務程式來實現,關於Windows服務程式的詳細介紹請看這篇文章:用Visual C#建立Windows服務程式。看了這篇文章之後,自己動手實踐了一下,現在將自己的操作步驟記錄如下:
1.建立Windows項目,選擇"Windows服務"類型的工程。

2.產生的Program.cs檔案中,定義了服務啟動的Main函數。

代碼
namespace WindowsService1
{
static class Program
{
/// <summary>
/// 應用程式的主進入點。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
}
}

3.在建立的工程中,點擊Service1.cs檔案,切換到程式碼檢視,產生的程式碼繼承於ServiceBase基類,並重載了OnStart和OnStop方法。我在這個檔案中進行了一些簡單的操作,就是在服務開始的時候,定義一個定時器,然後每隔1秒鐘,向檔案中寫入目前時間。

代碼
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
Timer timer;
public Service1()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
timer = new Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();
}

protected override void OnStop()
{
timer.Stop();
timer.Dispose();
}

void timer_Elapsed(object sender, ElapsedEventArgs e)
{
string filePath = AppDomain.CurrentDomain.BaseDirectory + "test.txt";
StreamWriter sw = null;
if (!File.Exists(filePath))
{
sw = File.CreateText(filePath);
}
else
{
sw = File.AppendText(filePath);
}
sw.Write("訪問時間:"+DateTime.Now.ToString()+Environment.NewLine);
sw.Close();
}
}
}
4.向工程中添加一個安裝程式類。

4.在新添加的安裝程式類中,設定服務的名稱,啟動方式,帳號名和密碼等資訊。

代碼
namespace WindowsService1
{
partial class Installer1
{
/// <summary>
/// 必需的設計器變數。
/// </summary>
private System.ComponentModel.IContainer components = null;

private System.ServiceProcess.ServiceProcessInstaller spInstaller;
private System.ServiceProcess.ServiceInstaller sInstaller;

/// <summary>
/// 清理所有正在使用的資源。
/// </summary>
/// <param name="disposing">如果應釋放託管資源,為 true;否則為 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region 組件設計器產生的程式碼

/// <summary>
/// 設計器支援所需的方法 - 不要
/// 使用代碼編輯器修改此方法的內容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();

// 建立ServiceProcessInstaller對象和ServiceInstaller對象
this.spInstaller =new System.ServiceProcess.ServiceProcessInstaller();
this.sInstaller = new System.ServiceProcess.ServiceInstaller();

// 設定ServiceProcessInstaller對象的帳號、使用者名稱和密碼等資訊
this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.spInstaller.Password = null;
this.spInstaller.Username = null;

// 設定服務的名稱
this.sInstaller.ServiceName = "WindowsService1";

//設定服務啟動的方式
this.sInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;

this.Installers.AddRange(new System.Configuration.Install.Installer[] {
this.spInstaller,this.sInstaller});
}

#endregion
}
}
5.產生工程,在bin目錄下會產生exe檔案。如果直接運行exe檔案的話,是不能執行的,需要使用安裝Windows服務用到一個名為InstallUtil.exe的命令列工具,開啟命令列工具,轉到InstallUtil.exe的目錄下,我安裝的是VS 2010,對應的目錄為:C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe,然後執行InstallUtil.exe+待執行的exe檔案的目錄,如:InstallUtil.exe F:\MyProject\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe。執行成功後,會在Windows的服務中,出現了剛剛添加的服務的名稱。

6.啟動該服務,這時開啟bin\Debug檔案夾,發現已經產生了一個test.txt的檔案,裡面記錄了時間。這說明服務已經正式開始執行。
7.停止服務的操作也和簡單,開啟命令列工具,轉到C:\Windows\Microsoft.NET\Framework\v4.0.30319目錄,然後執行InstallUtil.exe - u F:\MyProject\WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe命令就可以了。
源碼下載:建立Windows服務程式
分類: ASP.NET

   
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.