C#創建Windows服務

1.打開VS程序,創建一個項目選擇 Windows 服務,默認有一人 Service1.cs 類,在這裏改名爲 IndexService.cs 代碼如下.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.IO;

namespace FileIndexService
{
    
public partial class IndexService : ServiceBase
    
{
        
public IndexService()
        
{
            InitializeComponent();
        }


        
protected override void OnStart(string[] args)
        
{
            
// TODO: 在此處添加代碼以啓動服務。
            using (StreamWriter sws = new StreamWriter(@"D:Selfinservice.txt"))
            
{
                sws.Write(
"服務測試開始");
                sws.Flush();
                sws.Close();
            }


        }


        
protected override void OnStop()
        
{
            
// TODO: 在此處添加代碼以執行停止服務所需的關閉操作。
            using (StreamWriter sws = new StreamWriter(@"D:Selfinservice.txt"))
            
{
                sws.Write(
"服務測試結束");
                sws.Flush();
                sws.Close();
            }

        }

    }

}

這裏只是簡單的讀寫文件操作.要處理的邏輯大家可以根據自己的需求來寫代碼.

2.創建一個ProjectInstall.cs類,要繼承 Installer 類.代碼如下:其中using System.Configuration.Install;句在System.Configuration.Install裏,需要手動添加引用.

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.ServiceProcess;
using System.ComponentModel;
using System.Configuration.Install;

namespace FileIndexService
{
    [RunInstaller(
true)]
    
public class ProjectInstall:Installer
    
{
        
private ServiceInstaller serviceInstaller;
        
private ServiceProcessInstaller processInstaller;

        
public ProjectInstall()
        
{
            processInstaller 
= new ServiceProcessInstaller();
            serviceInstaller 
= new ServiceInstaller();

            processInstaller.Account 
= ServiceAccount.LocalSystem;  //這樣,不論哪個用戶登錄的系統,服務總會啓動

            
//Automatic 每次計算機重新啓動時,服務都會自動啓動
            
//Manual 服務安裝後,必須手動啓動
            
//Disabled     服務無法啓動
            serviceInstaller.StartType = ServiceStartMode.Automatic; 
            serviceInstaller.ServiceName 
= "FileIndexService"//設置服務的名稱

            Installers.Add(serviceInstaller);
            Installers.Add(processInstaller);
        }

    }

}

如果不增加ProjectInstall.cs,則會報如下錯誤

沒有 RunInstallerAttribute 的公共安裝程序。在 f:/Self/TestCpuDemo/FileIndexService/bin/Debug/IndexService.exe 程序集中可能可以找到“Yes”屬性。
大家可以先不添加試試看.

以下是摘自網絡:

其中各屬性的含意是:

ü         Autolog                 是否自動寫入系統的日誌文件

ü         CanHandlePowerEvent     服務時候接受電源事件

ü         CanPauseAndContinue          服務是否接受暫停或繼續運行的請求

ü         CanShutdown 服務是否在運行它的計算機關閉時收到通知,以便能夠調用 OnShutDown 過程

ü         CanStop                              服務是否接受停止運行的請求

ü         ServiceName                       服務名

安裝服務:

installutil FileIndexService.exe

卸載服務:

installutil /u FileIndexService.exe

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章