windows服務部署與卸載

來源:互聯網
上載者:User

標籤:des   code   tar   使用   檔案   string   

同事問到windows service的東東,現在整理一下,用c#如何建立一個windows service,以及如何調試、部署、卸載。

一、建立windows service

1. 開啟VS2008,建立一個Project, Project類型選擇Visual C#-Windows,在Templates中選擇Windows Service, 其他可以預設,點擊OK。

2. 在Solution Explorer中會看到自動產生了三個檔案:app.config, Program.cs,Service1.cs,其中app.config可以添加一些自訂的配置資訊,供代碼檔案使用;Program.cs提供了Main()方法,作為程式的人口,一般不需要修改;Service1.cs就是要實現的服務。

3. 雙擊開啟Service1.cs,會預設開啟Service1.cs[Design],在這個介面可以拖拽一個組件,此外,在Properties中,會看到一些關於這個service的屬性設定,比如AutoLog(True:使用windows event log記錄該service的日誌;False:使用者可以自訂自己的event Log),CanPauseAndContinue(True:可以處理暫停和繼續該服務的操作;False:不可以處理暫停或者繼續該服務的操作),ServiceName(用於讓Service Control Manager識別的服務名稱)。

4. 轉到Code視圖,可以看到預設產生了一個建構函式,和兩個需要重寫的方法OnStart和OnStop,我們需要覆寫這兩個方法。下面是簡單重寫了OnStart方法。

   protected override void OnStart(string[] args)    {             string path = @"d:\share\test.txt";             StreamWriter sw;             sw = new StreamWriter(path);             foreach (string arg in args) sw.WriteLine(arg);             sw.Close();             sw.Dispose();    } 這樣最基本的一個windows service就搞定了,但是能否正常運行,我們需要調試一把。

二、調試windows service

通常,我們用的調試方法是需要把服務部署好,然後attach to process...,找到對應的服務進程,予以調試。但是操作比較繁瑣,修改完服務後,需要卸載服務,然後重新部署,並且OnStart方法難以調試。從網路上找到一個好的調試方法,並嘗試通過,很好用的,推薦給大家:)

1. 在Service1.cs中添加public方法,將需要調試的protected方法進行封裝,供Main()調用,以調試OnStart()為例:

  public void start(string[] args)   {             this.OnStart(args);   }

2. 在Main()中添加下面的代碼,在人機互動時執行:

     if (Environment.UserInteractive)             {                 Service1 s = new Service1();                 string[] args = { "a", "b" };                 s.start(args);                 Console.WriteLine("the service is started");                 Console.ReadLine();                 s.stop();                 Console.WriteLine("the service is stopped");             }             else             {                 ServiceBase[] ServicesToRun;                 ServicesToRun = new ServiceBase[]           {            new Service1()           };                 ServiceBase.Run(ServicesToRun);             }

3. 更改Project的輸出類型

右擊該Project,點擊Properties,在Application標籤中,更改Output Type為Console Application。

好了,這樣就可以按F5調試了:)

三、部署

1. 在Service1.cs的design視圖中,右擊滑鼠,點擊Add Installer,會自動建立一個ProjectInstall.cs檔案,在design視圖中,有兩個組件serviceProcessInstaller1:這個組件的屬性有一個叫Accout,預設是User,這樣在部署的時候需要輸入使用者名稱和密碼,這裡我們可以選擇許可權最小的Localservice,當然要獲得更多的許可權可以設定其它兩個network service和local

serviceInstaller1:與服務本身相關的資訊,比如服務名,服務描述,顯示名稱,啟動類型等。

2. 如果使用系統預設的event log,那麼現在就可以編譯然後部署了;如果使用了自訂的event log,則需要在ProjectInstaller中修改部分代碼。

3. 使用installutil.exe部署windows service

(注意許可權,這裡需要用Administrator使用者去部署,否則會提示一些錯誤資訊:比如An exception occurred during the Install phase. System.Security.SecurityException: The source was not found, but some or all eve nt logs could not be searched.  Inaccessible logs: Security. 或者 access is denied)

runas /user:Administrator cmd

cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

installutil D:\project\WindowsService1\WindowsService1\bin\Debug\windowsservice1.exe

到此就部署完成了。

四、卸載服務

installutil /uD:\project\WindowsService1\WindowsService1\bin\Debug\windowsservice1.exe

五、啟動服務

1. 在啟動服務時,有時候會出現服務啟動後又停止的錯誤提示資訊,指出該服務可能沒有被使用,我們可以查看eventvwr,裡面會給出足夠的錯誤資訊,根據錯誤資訊調整service代碼就可以了,也有可能是因為服務要操作檔案,沒有許可權的原因,這時候把要操作的檔案許可權放開就可以了。

2. 啟動服務的時候,由於許可權問題啟動失敗,我們可以設定啟動的帳號。

3. windows service的參數是在啟動時一次傳遞的,可以以介面形式傳入參數,也可以通過命令列的形式:sc start service1 arg0 arg1 ...

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.