C# Asp.net Quartz.NET作業調度之創建、安裝、卸載、調試windows服務的簡單事例


一、創建windows服務

1、用VS創建windows服務,結果如下:

2、刪除默認生成的Service1.cs文件,然后創建自己的服務文件(如:MyService),並修改Program.cs文件的代碼,如下:

此時,解決方案的目錄結構如下:

3、雙擊MyService.cs服務文件,在左側設計模式中,右鍵,點擊“添加安裝程序”,自動會生成Projectinstaller.cs文件以及兩個安裝組件,如下:

 

4、右鍵”ServiceProcessInstaller1“,選擇屬性,設置Account 帳號方式,建議為LocalService,如下:

5、右鍵”ServiceInstaller1“,選擇屬性,設置屬性

  a)Description 服務描述,直接顯示到Windows服務列表中的描述;

  b)DisplayName 服務顯示名稱,直接顯示到Windows服務列表中的名稱;

  c)ServiceName 服務進程名稱,安裝與卸載服務時的唯一標識.

如下:

6、創建安裝服務批處理文件Install.bat,可以創建記事本,然后修改后綴為bat,記事本內容如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceDemo.exe
Net Start MyService
sc config MyService start= auto
pause

記事本另存為時設置編碼為ANSI,如下圖:

7、同理創建創建卸載服務批處理文件Uninstall.bat,內容如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause

此時解決方案的目錄結構如下:

 

二、寫服務代碼

右鍵”MyService.cs“,選擇查看代碼,如下:

namespace WindowsServiceDemo
{
    partial class MyService : ServiceBase
    {
        public MyService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO: 在此處添加代碼以啟動服務。
        }

        protected override void OnStop()
        {
            // TODO: 在此處添加代碼以執行停止服務所需的關閉操作。
        }
    }
}

下面實現自己的簡單功能,代碼如下:

using System;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
using System.Timers;

namespace WindowsServiceDemo
{
    partial class MyService : ServiceBase
    {
        private Timer time = new Timer();
        public MyService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            WriteLog("服務啟動,時間:"+DateTime.Now.ToString("HH:mm:ss") + "\r\n");

            time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent);
            time.Interval = 2 * 1000;//時間間隔為2秒鍾
            time.Start();
        }

        protected override void OnStop()
        {
            WriteLog("服務停止,時間:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }

        private void MethodEvent(object source, System.Timers.ElapsedEventArgs e)
        {
            time.Enabled = false;

            string result = string.Empty;
            string startTime = DateTime.Now.ToString("HH:mm:ss");
            try
            {
                //.........

                result = "執行成功,時間為:"+ startTime;
            }
            catch (Exception exp)
            {
                result = "失敗,原因:" + exp.Message;
            }
            finally
            {
                WriteLog(result);

                time.Enabled = true;
            }
        }

        /// <summary>
        /// 日志記錄
        /// </summary>
        /// <param name="logInfo"></param>
        public void WriteLog(string logInfo)
        {
            try
            {
                string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs";
                if (!Directory.Exists(logDirectory))
                {
                    Directory.CreateDirectory(logDirectory);
                }
                string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                File.AppendAllText(filePath, logInfo);
            }
            catch
            {
            }
        }
    }
}

 

具體功能是2秒鍾執行一次,並記錄日志。

三、安裝windows服務

重新生成整個解決方案,成功后,從項目所在文件夾賦值bin文件到某個自定義的文件夾,並將Install.bat和Uninstall.bat復制到bin下的Debug文件夾中。

以管理員身份運行Install.bat安裝服務,成功結果如下圖:

這是右鍵“我的電腦”,選擇“管理”,選擇“服務”,就可以看到服務已安裝,如下圖:

同時,Debug文件夾里有了Logs文件,Logs文件夾里有txt文檔,內容如下:

可以看到沒2秒鍾執行一次。

 

四、卸載windows服務

卸載服務,同樣以管理員身份運行Uninstall.bat即可。

五、調試windows服務

打斷點,在工具欄選“調試”下的“附加到進程”,附加自己的服務即可調試。

 


免責聲明!

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



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