1. 程式人生 > >C# windows服務製作(包括安裝及解除安裝)定時呼叫api介面

C# windows服務製作(包括安裝及解除安裝)定時呼叫api介面

 基於0起步來建立一個服務,做到簡單的記錄時間日誌功能,其具體招行方法可自行新增。

1.建立服務

2.刪除預設服務檔案

3.新增自己的服務檔案

4.更改啟動專案

5. 引用 using System.Timers;並新增FileClass類

FileClass類

複製程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace TerminalTrance
{
    public class FileClass
    {
        //建立資料夾
        
//引數:path 資料夾路徑 public bool CreateFolder(string path) { try { if (Directory.Exists(path)) { return true; } if (!Directory.Exists(path.Substring(0, path.LastIndexOf("\\")))) {
//若路徑中無“\”則表示路徑錯誤 return false; } else { //建立資料夾 DirectoryInfo dirInfo = Directory.CreateDirectory(path); return true; } } catch (Exception ex) {
return false; } } //建立檔案 //引數:path 檔案路徑 public void CreateFile(string path) { try { if (CreateFolder(path.Substring(0, path.LastIndexOf("\\")))) { if (!File.Exists(path)) { FileStream fs = File.Create(path); fs.Close(); } } } catch (Exception ex) { return; } } //刪除檔案 //引數:path 資料夾路徑 public void DeleteFile(string path) { try { if (!File.Exists(path)) { return; } else { File.Delete(path); } } catch (Exception ex) { return; } } //寫檔案 //引數:path 資料夾路徑 、content要寫的內容 public void WriteFile(string path, string content) { try { if (!File.Exists(path)) { CreateFile(path); } FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(content); sw.Close(); } catch (Exception ex) { return; } } /// <summary> /// 將即時日誌儲存入日誌檔案 /// </summary> public void WriteLogFile(string directoryPath, string content) { if (!Directory.Exists(directoryPath)) { CreateFolder(directoryPath); } try { //寫入新的檔案 string filePath = directoryPath + "\\" + DateTime.Now.Date.ToString("yyyyMMdd") + ".log"; FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(content); sw.Close(); fs.Close(); } catch (Exception ex) { } } } }
複製程式碼

6. 新增上步中需要的InitService()方法

複製程式碼
/// <summary>
        /// 初始化服務引數
        /// </summary>
        private void InitService()
        {
            base.CanShutdown = true;
            base.CanStop = true;
            base.CanPauseAndContinue = true;
            this.ServiceName = MainService.serviceName;
            this.AutoLog = false;//為了使用自定義日誌,必須將 AutoLog 設定為 false

            tim = new System.Timers.Timer();
            tim.Elapsed += new ElapsedEventHandler(tim_Elapsed);
            tim.Interval = 5000;
            tim.AutoReset = true;
        }
複製程式碼

7. 解決System不包含windows屬性問題,引用程式集。

8.新增上面引用 的 tim_Elapsed 定時方法

複製程式碼
 private void tim_Elapsed(object sender, EventArgs e)
        {
            StartThread();
        }

        /// <summary>  
        /// 開始任務 
        /// </summary>  
        private void StartThread()
        {
            MessageAdd(serviceName + " " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        }

        /// <summary>  
        ///  日誌記錄
        /// </summary>  
        /// <param name="serviceName">內容</param>  
        public void MessageAdd(string str)
        {
            try
            {
                fileclass.WriteLogFile(logPath, str);//寫入記錄日誌
            }
            catch
            {

            }
        }
複製程式碼

9.此時生成解決方案是成功的

10.在OnStart等中寫入自己的方法,這裡用日誌記錄

複製程式碼
   protected override void OnStart(string[] args)
        {
            try
            {
                this.tim.Enabled = true;
                this.tim.Start();
            }
            catch (Exception ex)
            {
                MessageAdd("OnStart錯誤:" + ex.Message);
            }
            MessageAdd(serviceName + "已成功啟動!");
        }

        protected override void OnStop()
        {
            try
            {
                this.tim.Stop();
            }
            catch (Exception ex)
            {
                MessageAdd("OnStop錯誤:" + ex.Message);
            }
            MessageAdd(serviceName + "已停止!");
        }

        protected override void OnContinue()
        {
            this.tim.Start();
            base.OnContinue();
        }

        protected override void OnPause()
        {
            this.tim.Stop();
            base.OnPause();
        }
複製程式碼

11.給服務新增安裝程式。右鍵滑鼠單擊MainService.cs[設計]*選項卡選項“新增安裝程式”。

12.可以看見專案中多瞭如下檔案和元件,serviceProcessInstaller1、serviceInstaller1是自動生成的

13.設定元件serviceInstaller1的主要屬性,StartType: AutoMatic自動啟動;ServiceName: 服務系統標識,在cmd命令中執行sr start/stop/query等等命令時候使用,用來唯一標識一個Window服務

 

14.設定元件serviceProcessInstaller1的主要屬性,Accout:賬戶型別,LocalSystem本地系統服務;

15.設定服務安裝後“允許和桌面進行互動”,

需要在ProjectInstaller.cs中新增如下程式碼。

複製程式碼
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;


namespace TerminalTrance
{
    [RunInstaller(true)]
    public partial class ProjectInstaller : System.Configuration.Install.Installer
    {
        public ProjectInstaller()
        {
            InitializeComponent();
        }

        protected override void OnAfterInstall(IDictionary savedState)
        {

            try
            {

                base.OnAfterInstall(savedState);

                // 允許服務桌面互動

                System.Management.ManagementObject myService = new System.Management.ManagementObject(string.Format("Win32_Service.Name='{0}'", this.serviceInstaller1.ServiceName));

                System.Management.ManagementBaseObject changeMethod = myService.GetMethodParameters("Change");

                changeMethod["DesktopInteract"] = true;

                System.Management.ManagementBaseObject OutParam = myService.InvokeMethod("Change", changeMethod, null);

            }

            catch (Exception ex)
            {

            }

        }
    }
}
複製程式碼

16.Windows服務的安裝和解除安裝

程式碼寫完後,編譯通過後,就可以安裝、解除安裝、除錯服務了。

在執行安裝或解除安裝服務前,我有把服務需要的相關檔案,複製到C:\Service\下面或其他路徑。一旦安裝完成後,此目錄不能變更,否則不能解除安裝該服務和服務執行會報錯。

安裝、解除安裝很簡單,只要在VS命令列導航到,服務程式的路徑。然後執行以下命令就OK了。

開啟如圖:

安裝服務:installutil C:\Service\TerminalTrance.exe

解除安裝服務:installutil /u C:\Service\TerminalTrance.exe

除錯的話,只能先安裝啟動服務,然後將該服務附加到程序,就可以除錯了。安裝好服務後,就可以在win7服務管理裡面,管理剛剛啟動的服務了。

 安裝成功後可在服務中看到

 在服務程式中可以看到新增的服務

可以看到程式的日誌記錄

另外一個方法是生成安裝exe程式

1.解決方案右鍵=》新建專案=》選擇安裝程式

2.安裝專案右鍵=》新增=》專案輸出,選擇主專案

3.安裝專案右鍵=》檢視=》自定義操作

4.自定義操作=》安裝右鍵=》選擇主輸出

5.解除安裝右鍵=》選擇主輸出

6.若有檔案需要新增到安裝後的資料夾中=》點選應用程式資料夾=》新增=》檔案,選擇檔案。安裝後就會生成指定檔案。

7.生成程式,完成,Setup資料夾中找到exe安裝檔案執行就 OK了。解除安裝也是執行此exe,按提示下一步就OK

相關推薦

C# windows服務製作包括安裝解除安裝定時呼叫api介面

 基於0起步來建立一個服務,做到簡單的記錄時間日誌功能,其具體招行方法可自行新增。1.建立服務2.刪除預設服務檔案3.新增自己的服務檔案4.更改啟動專案5. 引用 using System.Timers;並新增FileClass類FileClass類using System; using System.Col

Windows下用cmd命令安裝解除安裝服務(

第一種方法: 1. 開始 -執行 -cmd 2. cd到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(Framework版本號按IIS配置) 3. 安裝服務: 執行命令列 InstallUtil.exe E:/test.exe

Android應用如何監聽自己是否被解除安裝解除安裝反饋功能的實現第二版

原文地址為: Android應用如何監聽自己是否被解除安裝及解除安裝反饋功能的實現(第二版)   昨天發了一篇有關監聽自己是否被解除安裝和解除安裝反饋功能實現的部落格,地址如下:http://www.cnblogs.com/zealotrouge/p/3157126.html,發出去後收

Android應用如何監聽自己是否被解除安裝解除安裝反饋功能的實現第三版

1 /* 標頭檔案begin */ 2 #include "main_activity_UninstalledObserverActivity.h" 3 /* 標頭檔案end */ 4 5 #ifdef __cplusplus 6 extern "C" 7 { 8 #en

Linux下的MySQL安裝解除安裝

1.1  檢視mysql的安裝路徑: [[email protected] ~]# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql/usr/share/mysql /usr/share/man/man1

Linux下mongoDB的安裝解除安裝

軟體包 MongoDB在自己的倉庫中提供官方支援的軟體包,該倉庫包含下列包: 包名 描述 mongodb-org 一個集合包,它將自動安裝下面列出的四個元件包 mongodb-org-server 該包中包含mongod守護程式,關聯的ini

little snitch 4 破解版安裝解除安裝教程

Little Snitch for Mac破解版是Mac平臺上一款優秀的防火牆軟體,Little Snitch for Mac 破解版可以控制您的私人外撥資料,實時提醒您有關出站網路連線,非常好用,這裡為大家提供little snitch 破解版安裝及解除安裝教程。 Little Snit

Jenkins安裝解除安裝

1、到Jenkins官網(https://jenkins.io/download/  )下載最新版本對應系統版本 2、上傳rpm包,並安裝: rpm -ivh jenkins-2.127-1.1.noarch.rpm 3、安裝

npm全域性安裝和本地安裝解除安裝

NPM是 1)npm是第三方模組的託管網站         1.node包括ECMAscript核心         2.全域性成員          3.模組系統成員  (包括  核心模組,第三方模組,自定義模組) 2)npm是node包的管理工具  (npm 

Linux採用yum方式安裝解除安裝軟體

前言 很多時候,我們在Linux中安裝了軟體,但是卻不怎麼會解除安裝,Linux不像Windows可以直接在控制面板中解除安裝。這篇文章肯定會幫助到你。收藏好了。 正文 1.採用yum方式安裝軟體 yum方式安裝軟體是最方便的,自己一直踐行的理論是能用yum絕不用原始碼

win10安裝解除安裝SQL Server2008資料庫

一.資料庫安裝環境          作業系統:win10          SQL server:SQL server 2008 R2 二.全新資料庫安裝 1.安裝擴充套件檔案        雙擊安裝檔案,彈出如下窗體:                        

centos7中Docker的安裝解除安裝

使用 yum 安裝(CentOS 7下)Docker 要求 CentOS 系統的核心版本高於 3.10 ,檢視本頁面的前提條件來驗證你的CentOS 版本是否支援 Docker 。通過 uname -r 命令檢視你當前的核心版本[[email protected] ~]# uname -r 3.10

ubuntu16.04安裝解除安裝網易雲音樂及其無法啟動解決方案

下載官網deb檔案   sudo dpkg -i netease-cloud-music_1.1.0_amd64_ubuntu.deb    正在選中未選擇的軟體包 netease-cloud-music。 (正在讀取資料庫 ... 系統當前共安裝有

ubuntu16.04安裝解除安裝網易雲音樂

特別開心的一件事就是網易雲音樂有ubuntu的版本,下面就開始安裝吧。 開啟終端 $cd 下載 $sudo dpkg -i netease-cloud-music_1.0.0_amd64_ubuntu16.04.deb 出現如下錯誤: 重新

Android應用如何監聽自己是否被解除安裝解除安裝反饋功能的實現

  一個應用被使用者解除安裝肯定是有理由的,而開發者卻未必能得知這一重要的理由,畢竟使用者很少會主動反饋建議,多半就是用得不爽就卸,如果能在被解除安裝後獲取到使用者的一些反饋,那對開發者進一步改進應用是非常有利的。目前據我所知,國內的Android應用中實現這一功能的只有360手機衛士、360平板衛士,那麼如

關於在Ubuntu下進行下載安裝解除安裝VMware workstation

首先我們來介紹下如何進行ubuntu下VMware workstation的下載安裝 1.VMware workstation 11下載連線: https://download3.vmware.com/software/wkst/file/VMware-Workstatio

ubuntu安裝解除安裝cuda

Ubuntu安裝cuda: website:https://developer.nvidia.com/cuda-downloads Installation Instructions: `sudo dpkg -i cuda-repo-ubuntu1404-7-5-

webpack安裝解除安裝常用命令

##安裝(推薦區域性安裝) npm install webpack -g //-g 代表全域性安裝 npm install webpack -s //-s 代表區域性安裝 #安裝 npm install --save-dev webpack -s

xcode外掛安裝解除安裝

一、外掛安裝 1.一般情況從網上下載你要安裝的外掛,發現是一個工程; 2.開啟這個工程,command+R執行; 3.Xcode6之後,重啟Xcode時會提示“Load bundle”、“skip B

ubuntu下apt-get安裝解除安裝jdk

安裝: sudo apt-get install default-jdk 檢視版本資訊: java -version 解除安裝: sudo apt-get autoremove default-jdk 如果不能解除安裝乾淨,用下面的方法,親測成功 jdk徹底解除安裝: (