1. 程式人生 > >動態安裝你的windows服務

動態安裝你的windows服務

前言:先說明一下本文示例windows服務的簡單需求,即根據外部配置實現不同方式記錄日誌的功能。記錄日誌的方式有三種,分為文字記錄、資料庫記錄以及文字和資料庫同時記錄日誌。如您所知,這個功能基本上沒有任何實用價值,純粹為了方便本文的舉例和說明。文章最後提供示例demo下載。

一、中規中矩,寫一個簡單的windows服務

1、新建windows服務

開啟開發神器VS(我這裡用的是VS2010),單擊“新建專案”,在彈出的選項卡上左側選擇“Windows”,然後在右側選擇“Windows服務“模板,確定即可。按照命名需要,本文示例中我把VS預設生成的Service1重新命名為LogService。

(1)、建構函式

1 2 3 4 5 6 7 8 9 public LogService() { InitializeComponent(); this.ServiceName = "SimpleLogService"; CanPauseAndContinue = true; CanStop = true; CanShutdown = true; CanHandleSessionChangeEvent = true; }

我們在建構函式裡設定了幾個常用的屬性。其中CanPauseAndContinue = true標識該windows服務可以暫停和繼續。其實我們也可以在設計介面進行屬性設定,不是重點,略過。

(2)、重寫事件

預設情況下,在LogService類中VS已經替我們生成了OnStart和OnStop方法。如果我們還設定了屬性 CanPauseAndContinue = true, 則我們可能還要重寫OnPause和OnContinue方法。在windows作業系統的服務控制器上,我們檢視任意一個服務的屬性,肯定會看到”啟動“、”停止“、”暫停“和”恢復“四個按鈕選項。上面的四個重寫方法我們可以理解成就是讓我們實現某個服務的四個按鈕選項下的對應事件。

SimpeLogervice

需要說明的是,windows服務都是在後臺默默無聞地低調工作著,所以對開發人員來講,通常長時間大批量的後臺工作任務,做成windows服務再合適不過。但是如果您的程式實現使用了非同步,就會給服務的停止、暫停和恢復等控制帶來極大難度,而且有時候甚至會產生意想不到的結果。本文示例中對於停止、暫停和恢復,都是對一個靜態執行緒進行操作。實際開發中這種方式並不保險,因為非同步程式中你實在不好控制程式到底執行到哪一步,執行的結果怎麼樣。我估計微軟預設不生成暫停和恢復這兩個事件,也是基於控制不易方面的考慮。在實際專案開發中,除非可以明確確定非同步程式已經暫時不工作(通過檢視特定日誌),否則“暫停”和“恢復”這兩個按鈕通常預設都是不可用的(CanPauseAndContinue = false)。

(3)、服務裡的主要業務邏輯簡單說明

在LogBuilder類裡,已經封裝了該windows服務主要的業務邏輯。其中三個方法Log2Text,Log2DB和LogBoth看命名知道是什麼意思了。本文重點也不在這裡,這裡一帶而過。

2、為服務新增Installer

服務的主體實現已經有了,當然還需要服務安裝程式邏輯。開啟LogService設計介面,右鍵選擇”Add Installer“欄目,在生成的ProjectInstaller裡就輕鬆添加了一個ServiceInstaller和ServiceProcessInstaller例項。這裡你可以根據VS提供的視覺化的方式給兩個Installer進行屬性設定,也可以直接在建構函式中設定。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public ProjectInstaller() { InitializeComponent(); ServiceInstaller installer = new ServiceInstaller(); installer.ServiceName = "SimpleLogService";//服務的名稱要和LogService建構函式裡的服務名稱一致 installer.DisplayName = "測試日誌記錄Windows服務";//windows服務顯示的名稱 installer.Description = "這是一個簡單的測試日誌記錄Windows服務,在log資料夾下可以看到詳細文字日誌"; installer.StartType = ServiceStartMode.Manual; // 自動 手動 或禁用 這裡設為手動 ServiceProcessInstaller processInstaller = new ServiceProcessInstaller(); // 採用本地系統帳戶執行服務

相關推薦

動態安裝windows服務

前言:先說明一下本文示例windows服務的簡單需求,即根據外部配置實現不同方式記錄日誌的功能。記錄日誌的方式有三種,分為文字記錄、資料庫記錄以及文字和資料庫同時記錄日誌。如您所知,這個功能基本上沒有任何實用價值,純粹為了方便本文的舉例和說明。文章最後提供示例demo

使用Java Service Wrapper將jar包安裝Windows服務

部署 detect cap xxx face port exception script 參考 在windows上運行jar包,需要在工作目錄下使用命令行運行jar包,這樣會出現一個命令行窗口。而且這個命令行窗口有可能會不小心被關閉,且服務器啟動後需要人為去點擊開啟。 對於

mongodb 安裝windows服務、創建用戶

切換目錄 pro 文件內容 用戶權限 span blog 切換 log create http://www.cnblogs.com/best/p/6212807.html 打開MongoDB的安裝目錄如“C:\Program Files\MongoDB\Ser

ElasticSearch安裝Windows服務

管理 windows系統 number AC ring windows服務 man sea 技術分享 目前我都是在windows的環境下操作是Elasticsearch,並且喜歡使用命令行 啟動時通過cmd直接在elasticsearch的bin目錄下執行elasticse

Redis安裝windows服務開機自啟

文章目錄 @[toc] 下載地址(官方跳轉) 安裝步驟 其他命令 redis.windows.conf 配置 下載地址(官方跳轉) 版

把程式安裝windows服務的過程及遇到的問題

做好了定時任務的程式,要把它放在伺服器上,作為windows服務執行,也就是說,退出登入,使用者登出後程序任然在後臺執行。 將exe程式釋出為服務的步驟記錄如下: 場景1 :程式路徑沒問題的情況  按照網上的有些說法,進入控制檯,如下操作(VICTTEC_Maintai

window server 將nginx安裝windows服務

       最近專案負責的window伺服器老是自動重啟,nginx 經常要手工啟動,另外在伺服器上,將隨著使用者的登出而退出,導致不必要的麻煩,本經驗通過介紹如何使用winsw程式將nginx安裝為服務,以解決此問題: 1、我用的nginx下載地址:h

在Win7下將Sphinx安裝windows服務時碰到如下錯誤及伺服器操作

         選項 <server> 的格式為 "\\ServerName"          可以鍵入 "sc [command]"以獲得命令的進一步幫助          命令:            query-----------查詢服務的狀態,                   

將SVN伺服器程式安裝Windows服務的方法

背景原因:SVN伺服器安裝、配置完成後,用命令列:svnserve  -d  -r  F:\svnDate  啟動服務;每次用命令列啟動svn服務比較煩瑣; 解決方案:用Windows提供的sc.exe工具來實現將SVN伺服器程式安裝成為Windows服務,執行如下命令即

nginx安裝Windows服務

安裝Nginx下載windows版nginx (http://nginx.org/download/nginx-1.10.0.zip),之後解壓到需要放置的位置(D:\xampp\nginx)將Nginx設定為Windows服務下載該工具後,將其放在 Nginx安裝目錄下,並

Redis安裝windows服務-開機自啟

1:開啟一個 cmd 視窗 使用cd命令切換目錄到 C:\redis 執行  redis-server --service-install redis.windows.conf 安裝成功後進入服務管理》windows鍵+R輸入 services.msc 可以右鍵啟動

如何將nginx安裝Windows服務

將nginx註冊為WIndows服務,有隨機啟動等很多好處,下面簡介安裝方法。 下載winsw 自行百度下載應用程式,將下載到的可執行程式檔案放到nginx安裝目錄,重新命名為nginxse

MongoDB安裝成為Windows服務及日常使用遇到問題總結

安裝MongoDB: http://blog.csdn.net/liuzhoulong/article/details/6124566 嚴格按照上面的步驟,設定資料庫目錄,設定日誌目錄,安裝服務。可是在安裝服務時,遇到安裝不上服務問題。後來參考了下面這篇文章【】:ht

帶有加解密通訊的應用安裝windows服務時,需要注意使用的賬戶

今天在客戶演示試用系統掉了回鏈子,本來伺服器端安裝包要安裝到win2003上的,但客戶手頭只有個xp, 我感覺問題不大就裝了,結果登入認證時卻報了個“該項不適於在指定狀態下使用”,折騰半天,好歹客戶是熟人,沒太計較,給

C#:安裝Windows服務動態指定服務名及描述

one 無效 ext blog IT exce param pre 復制 Installer.cs>> public Installer() { InitializeComponent();

LANMP一鍵安裝包 版本服務選 可安裝單一服務

entos nginx 打開 span 源文件 play chmod 防火墻規則 服務器 介紹與使用 更多內容請到 烏龜運維 wuguiyunwei.com 請保證在系統原有yum源文件存在的情況下運行此腳本 以下以centos7.3為例: 下面以安裝LN

C# Windows服務安裝和卸載批處理

oot sys name 後臺服務 soft onf 啟動 work sta @ECHO "請按任意鍵開始安裝後臺服務. . ."@ECHO "清理原有服務項. . ."%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\inst

Windows服務安裝、卸載

href ice wcf 文件刪除 兩個 www tex name cep 創建一個Windows服務 http://jingyan.baidu.com/article/fa4125acb71a8628ac709226.html 安裝服務 使用FramWork框架自

Mysql數據庫一:安裝與創建windows服務

clear 程序 啟動 hang spa -- pan mysql數據庫 top Mysql數據庫安裝與創建windows服務 1.先下載壓縮包(mysql-5.7.18-winx64.zip)移動到對應目錄(如D:\software)後解壓. 2.安裝服務端: m

SC命令---安裝、開啟、配置、關閉windows服務 bat批處理(轉載)

csdn 運行 call 命令 www. 刪除服務 net href onf 轉載:http://www.jb51.net/article/49627.htm 轉載:http://blog.csdn.net/c1520006273/article/details/50539