C#寫Windows Service(windows服務程序)



背景:
       要學習使用一個新東西,我們必須知道他是個什么東西。對於我們此次研究的windows服務來說,他又是個什么東西,其實也沒有什么高深的了。


windows service概述:

       一個Windows服務程序是在Windows操作系統下能完成特定功能的可執行的應用程序。Windows服務程序雖然是可執行的,但是它不像一般的可執行文件通過點擊一下就直接可以運行,它有它特殊的啟動方式。這些啟動方式包括了自動啟動和手動啟動兩種方式。

       對於自動啟動的Windows服務程序,它們在Windows啟動或是重啟之后用戶登錄之前就開始執行了。只要你將相應的Windows服務程序注冊到服務控制管理器(Service ControlManager)中,並將其啟動類別設為自動啟動就行了。而對於手動啟動的Windows服務程序,你可以通過命令行工具的NET START 命令來啟動它,或是通過控制面板中管理工具下的服務一項來啟動相應的Windows服務程序。更或者,你自己寫一個winform的窗體來控制服務的啟動,那個的方式就多種多樣了。

       類似,一個Windows服務程序也不能像一般的應用程序那樣被終止。因為Windows服務程序一般是沒有用戶界面的,所以你也要通過命令行工具來停止它,或是在系統關閉時使得Windows服務程序自動停止。因為Windows服務程序沒有用戶界面,所以基於用戶界面的API函數對其是沒有多大的意義。為了能使一個Windows服務程序能夠正常並有效的在系統環境下工作,程序員必須實現一系列的方法來完成其服務功能。

有的時候使用服務來管理或者自動化的做一些工作對我們的幫助可謂是巨大的,因為電腦比人腦更加准時,負責!(僅僅是個人意見,如有不同,勿扔磚頭)


那下面就說一下如何用C#來寫一個windows service程序:


1、創建windows service項目:

   


效果:

   


接下來,我們就在里面寫自己要運行的代碼程序就好了,多會應用進程或線程:

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.Threading.Tasks;
using System.IO;
using System.Threading;

namespace TestService1
{
    public partial class Service1 : ServiceBase
    {
        System.Timers.Timer timer1;//計時器
        public Service1()
        {
            InitializeComponent();
        }

        //啟動服務時執行
        protected override void OnStart(string[] args)
        {
            timer1 = new System.Timers.Timer();
            timer1.Interval = 60000;//執行時間間隔60s
            timer1.Elapsed += new System.Timers.ElapsedEventHandler(TestWrite);
            timer1.Enabled = true;
        }

        //具體執行的方法程序
        private void TestWrite(object sender, System.Timers.ElapsedEventArgs e)
        {
            while (true)
            {
                string FileName = "test";
                string FILE_NAME = FileName + ".txt";//每天按照日期建立一個不同的文件名
                StreamWriter sr;
                if (File.Exists(FILE_NAME)) //如果文件存在,則創建File.AppendText對象
                {
                    sr = File.AppendText(FILE_NAME);
                }
                else  //如果文件不存在,則創建File.CreateText對象
                {
                    sr = File.CreateText(FILE_NAME);
                }
                string content = "這只是個測試" + System.DateTime.Now.ToString();
                sr.WriteLine(content);//將傳入的字符串加上時間寫入文本文件一行
                sr.Close();
            }
        }

        //停止服務時執行
        protected override void OnStop()
        {
            this.timer1.Enabled=false;
        }
    }
}


寫完之后,進行項目生成。

4、設置屬性:

 

將不帶Process的服務名稱改為自己需要的,並把啟動模式設置為AUTOMATIC(自動)

把帶Process的屬性account改為LocalSystem


5、重新生成項目,進行項目安裝,流程見上篇博客

   

如圖,啟動服務。


6、運行效果:



總結:

       這只是一個簡單的使用服務來向txt文檔寫內容的小例子,可是如果我們要定時向一個文檔里面去寫日志或者數據映射,這會不會幫我們很大的忙呢,前提是,自己電腦的內存要夠大,CPU也要支持,要不然,服務開得多了,會造成宕機的哦!加油,繼續研究



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM