Win服務程式編寫以及安裝一般步驟

来源:https://www.cnblogs.com/DiKingVue/archive/2019/08/13/10896067.html
-Advertisement-
Play Games

Win服務程式編寫以及安裝一般步驟 Windows服務的優點有:1. 能夠自動運行。2. 不要求用戶交互。3. 在後臺運行。本文將介紹常見服務程式編寫的一般步驟以及註意事項。 設計服務程式實例: 使用語言:VB.Net,開發工具:Visual Studio 2010 新建服務項目 如圖1所示: 圖1 ...


Win服務程式編寫以及安裝一般步驟

  Windows服務的優點有:1. 能夠自動運行。2. 不要求用戶交互。3. 在後臺運行。本文將介紹常見服務程式編寫的一般步驟以及註意事項。

設計服務程式實例:

  1. 創建服務程式,主要功能:隔段時間自動寫入字元串到文本文檔中。

  使用語言:VB.Net,開發工具:Visual Studio 2010

  • 新建服務項目

  如圖1所示:

圖1

  • 添加組件

    操作如圖2,得到如圖3結果

圖2

 

圖3

  System.windows.forms中的time組件在服務程式中部適用,所以此處要選擇system.timers.timer。繼續圖3操作後設置timer以及service1的屬性.如圖4/5。

圖4

 

圖5

  • 程式編寫

圖6

  代碼如下:

 1 Protected Overrides Sub OnStart(ByVal args() As String)
 2 
 3 ' 請在此處添加代碼以啟動您的服務。此方法應完成設置工作,
 4 
 5 ' 以使您的服務開始工作。
 6 
 7 Timer1.Start()
 8 
 9 End Sub
10 
11  
12 
13 Protected Overrides Sub OnStop()
14 
15 ' 在此處添加代碼以執行任何必要的拆解操作,從而停止您的服務。
16 
17 Timer1.Stop()
18 
19 End Sub
20 
21  
22 
23 Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
24 
25 Dim witer As StreamWriter = New StreamWriter("C:\string.txt", True)
26 
27 witer.WriteLine("YourText")
28 
29 witer.Close()
30 
31 End Sub

 

  或者基於filestream寫入,代碼如下:

 1 Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
 2 
 3 Static i As Integer = 1
 4 
 5 Dim fstream As New FileStream("G:\string.txt", FileMode.OpenOrCreate, FileAccess.Write)
 6 
 7 Dim write As New StreamWriter(fstream)
 8 
 9 fstream.Seek(1, SeekOrigin.End)
10 
11 write.Write("MyTestService" & i.ToString)
12 
13 write.Close()
14 
15 fstream.Close()
16 
17 i += 1
18 
19 End Sub

 

  • 服務程式安裝

 

 

圖7

  圖7操作後出現如圖8界面,設置安裝控制項屬性如圖9和圖10

圖8

圖9

圖10

  .net編寫服務程式集成了許多的功能,此處創建服務安裝,並不需要編寫程式,只需添加控制項,修改屬性即可,十分方便。

 

  • 編譯生成

  編譯會出現警告,如圖11,但程式沒出先錯誤,查看C:\出現"string.text"文檔,裡面寫入了文本。

圖11

 

  • 安裝及卸載

  啟動vs命令提示符視窗。如圖12

圖12

  安裝

  註意要以管理員身份運行

  Windows服務安裝異常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日誌。不可 訪問的日誌: Security。解決辦法,以管理員身份運行即可。

  輸入代碼:

    InstallUtil C:\Users\h\Desktop\timetest_WindowsService\timetest_WindowsService\bin\Debug\timetest_WindowsService.exe

圖13

  卸載

    installutil/u C:\Users\h\Desktop\timetest_WindowsService\timetest_WindowsService\bin\Debug\timetest_WindowsService.exe

圖14

  預設情況下,Windows服務基於安全考慮,是不允許任何服務程式和桌面進行交互的。也就是說,使用任何的Windows Form 的很多特性將會莫名奇妙的不起作用,如進行messageBox的顯示,啟動另一進程,諸如:打開某個pdf格式的文件,者使用System.Windows.Form.Timer對象也不行,這種不起作用表現在沒有進行服務程式安裝的情況下調試的時候會提示無法啟動服務需要安裝的警告,但是 messageBox仍會顯示,pdf格式的文檔仍會打開;奇怪的是,在安裝後,啟動服務程式後,messageBox以及pdf格式的文檔均不會打,開程式將沒任何的響應。由於Windows服務具有難以調試的特點,如果不註意這點,你反覆檢查自己的代碼,都很難發現問題的所在的。

  但也並不是說不能編寫複雜的互動式服務程式,只是涉及到的知識會更複雜一些,通常會用涉及到一些Windows API介面的操作。本文旨在說明服務程式編寫的一般步驟,對於複雜的交互服務程式,其一般流程大致相同,網上已有大神在此有詳細的解釋說明。可參考博客:http://www.cnblogs.com/gnielee/archive/2010/04/08/session0-isolation-part2.html,裡面有很詳細的介紹。

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Flink 序列化機制 <! more https://t.zsxq.com/JaQfeMf 博客 1、 "Flink 從0到1學習 —— Apache Flink 介紹" 2、 "Flink 從0到1學習 —— Mac 上搭建 Flink 1.6.0 環境並構建運行簡單程式入門" 3、 "Flin ...
  • Flink Metrics 有如下模塊: <! more "Flink Metrics 源碼解析 —— Flink metrics core" "Flink Metrics 源碼解析 —— Flink metrics datadog" "Flink Metrics 源碼解析 —— Flink met ...
  • JobManager 處理 SubmitJob <! more https://t.zsxq.com/3JQJMzZ 博客 1、 "Flink 從0到1學習 —— Apache Flink 介紹" 2、 "Flink 從0到1學習 —— Mac 上搭建 Flink 1.6.0 環境並構建運行簡單程式 ...
  • JobManager 的作用 <! more https://t.zsxq.com/2VRrbuf 博客 1、 "Flink 從0到1學習 —— Apache Flink 介紹" 2、 "Flink 從0到1學習 —— Mac 上搭建 Flink 1.6.0 環境並構建運行簡單程式入門" 3、 "F ...
  • 字元串格式化處理 遠古寫法 以前通常使用運算符號 , 插入的值 類型, 指插入的值為包含 3 位小數的浮點數: 關鍵字插入法: Python 3 推薦方法 新版本 Python 中,應選擇使用字元串方法 ,每個替換欄位都用 大括弧(花括弧)括起,括弧內可留空或添加格式設置信息: 一般用法: 索引也可 ...
  • JobGraph <! more https://t.zsxq.com/naaMf6y 博客 1、 "Flink 從0到1學習 —— Apache Flink 介紹" 2、 "Flink 從0到1學習 —— Mac 上搭建 Flink 1.6.0 環境並構建運行簡單程式入門" 3、 "Flink 從 ...
  • 在平時看各種框架的源碼的過程中,經常會看到一些位移運算,所以作為一個Java開發者是一定掌握位移運算的。 正數位移運算 Java中有三個位移運算: 我們直接看一下Demo: 乍一眼看到上面Demo的列印結果,你應該是懵逼的,接下來我來解釋一下這個結果到底是如何運算出來的。 上面的Demo中有“2”和 ...
  • 第一種方法: 採用排序,進行兩趟冒泡排序,當數據基本有序(升序)且不要求按照原有數據中的順序輸出時可選擇此方法 第二種方法: 輸出的數據按照原有數據中的順序排列 測試數據: 懶得輸入,就直接初始化了 註意:在第二次使用同一組數據時,需要重新輸入或者定義另一個數組賦初值,切不可直接使用,因為冒泡排序已 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...