【轉】如何在命令行腳本中啟動帶參數的Windows服務


我們有一個自己編寫的Windows服務,我們希望該服務在啟動時可以根據用戶輸入的參數實現不同的功能。

要實現這樣的需求並不是很難,下面這個例子我用來示范如何編寫該服務

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Diagnostics;
 6 using System.Linq;
 7 using System.ServiceProcess;
 8 using System.Text;
 9 
10 namespace WindowsServiceSample
11 {
12     public partial class SampleService : ServiceBase
13     {
14         public SampleService()
15         {
16             InitializeComponent();
17         }
18 
19         /// <summary>
20         /// 服務啟動時觸發
21         /// </summary>
22         /// <param name="args">用戶可以設置的輸入參數</param>
23         protected override void OnStart(string[] args)
24         {
25 
26             if (args.Length > 0)
27             {
28                 EventLog.WriteEntry(string.Format("sample service is started with parameter :{0}", string.Join(",", args)));
29             }
30             else
31             {
32                 EventLog.WriteEntry("sample service is started with non parameter");
33             }
34         }
35 
36         protected override void OnStop()
37         {
38         }
39     }
40 }

在上述代碼中,我區分了帶參數啟動和不帶參數啟動兩種情況。很顯然,在帶參數的那種情況下,我們可以根據參數做不同的處理。本文僅為了說明參數問題,並不真的去考慮那些實際應用。我通過寫日志的方式來區分即可。

這個服務安裝起來之后,在服務控制台中看起來是這樣的

如果我們通過手工去啟動的話,如何設置參數呢?很簡單,雙擊該服務,在屬性對話框中輸入參數即可

【注意】是先輸入參數,然后點擊“Start”

【注意】不同的參數之間用空格隔開

啟動成功后,我們在事件日志中可以看到一條日志

這說明,參數確實被捕捉到了。服務正常進行了工作。

還不錯對吧?但本文的最大目的並不是解釋這個,上面都是鋪墊,如果我們是要通過命令行腳本的方式來啟動服務,而不是手工啟動服務,那么該如何設置參數呢?

我們都知道要在命令行中啟動服務,一般都是通過net start命令。這個工具的格式如下

我們可以通過net start sampleservice啟動服務

 

在事件日志中確實看到它是沒有帶參數啟動的

 

好吧,那么如何傳遞參數過去呢?

經過研究發現,net 工具要傳遞參數的話,有一個很特殊的做法

net start sampleservice /a /b /c /d

 

但是這樣啟動之后,看日志卻發現有一點點特殊

請主要,參數確實傳遞進來了。但包含了“/”。如果說在程序中識別這個特殊的符號,那么也是沒有問題的。只不過,這樣就未必是增加了程序的復雜性啦。

那么,有沒有更加簡單的做法呢?(簡單的意思是說與手工操作是一樣的,不需要為此去修改代碼)

我想起來,除了用net start之外,還可以通過sc start命令來啟動服務

 

這樣的命令就直觀多了。我們馬上來看一下日志文件中的結果吧

很好,這是我們需要的效果。也就是說用sc工具的話,可以很好地傳遞參數。

【備注】sc的意思是,service controller,關於該工具的詳細介紹,請參考 http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sc.mspx?mfr=true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM