Windows服務 + Quartz.NET

服務基礎

安裝
管理員打開cmdhtml

cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
InstallUtil.exe Path_WinSvc.exe

或者 將 InstallUtil.exe 直接拷貝到生成目錄,運行 InstallUtil WinSvcName.exegit

基礎github

原生實現windows

  • ServiceBase
  • ServiceInstaller

問題梳理框架

在初始化安裝時發生異常:System.BadImageFormatException:
未能加載文件或程序集「file:///F:\IT\C#\WinSvc\TestWinSvc\Release\WinSvcSqh.exe」或它的某一個依賴項。
試圖加載格式不正確的程序。

解決:注意生成-目標平臺(x64 or x86)以及應用程序-目標框架ide

在「安裝」階段發生異常:「System.Security.SecurityException:未找到源,但未能搜索某些或所有事件日誌。
不可訪問的日誌: Security。」

解決:不經過cmd窗口,改用.bat文件,右鍵以管理員身份運行。學習

安裝服務Install.bat以下,僅供參考:spa

%複製安裝文件至當前目錄%
copy C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe  %~dp0
%切換到當前bat文件所在目錄%
cd /d %~dp0
%執行安裝命令%
installutil  WinSvcSqh.exe
@pause;

最後,在 個人電腦-右鍵屬性-服務 中便可看到新增的windows服務。.net

  • 啓動服務:直接右鍵-Start,或者 管理員身份運行cmd執行 net start WinSvcSqh
  • 中止服務:右鍵-Stop,或者 管理員身份運行cmd執行 net stop WinSvcSqh

看下代碼,基本windows服務以下調試

partial class WinSvcSqh : ServiceBase
{
	public WinSvcSqh() {
		InitializeComponent();
	}

	protected override void OnStart(string[] args) {	
		// do something
	}

	protected override void OnStop() {
		// do something
	}
}

主程序啓動代碼以下

/// 應用程序的主入口點。
public static void Main()
{
	ServiceBase[] ServicesToRun;
	ServicesToRun = new ServiceBase[] { 
		new WinSvcSqh()
	};
	ServiceBase.Run(ServicesToRun);
}

基礎教程參見: http://www.javashuo.com/article/p-bgaydmur-dn.html

Castle

  • IOC框架
  • 定時任務、日誌服務

具體參見:.Net IOC框架 | sqh

擴展

目標:TopShelf+Quartz.net實現基於window服務的定時任務調度

Topshelf

官網 | Topshelf,開源,跨平臺的宿主服務框架(Windows服務開發框架),便捷建立 windows服務。

  • 容許使用控制檯程序開發windows服務,方便調試
  • 支持多實例的部署
  • 集成log4net

結合 Quartz,實現任務調度服務。

Quartz .Net

官網 | Quartz,開源,企業級定時計劃任務調度框架,支持 .NET Core。

初步學習:Quartz .net開源job調度框架,相關參見Github上的demo示例:JobScheduleDemoCode

相關文章
相關標籤/搜索