如何調試Windows服務

來源:互聯網
上載者:User

      當你寫了一個Windows服務的程式,然後你把這個服務安裝到你的電腦上,如果這個服務程式有一些邏輯錯誤,沒有按照你設想的執行。你想進行調試,但是又不知道如何下手,因為它跟其他的普通程式調試是不一樣的。這裡介紹兩種方法。

 

第一方法:

      這種方法其實說起來不叫調試,也是一種笨辦法,就是用MessageBox把一些程式的中間資訊輸出來,方便你找出程式是在哪個地方出問題了,你也可以在try catch中使用,用MessageBox把異常彈出來,這種方法也比較直觀。可惜,實現起來也有問題。我們首先要添加using System.Windows.Forms;的引用,然後加上一行代碼MessageBox.Show(ex.ToString(), "Error");本以為這樣說行了,可是把服務重新編譯產生,並安裝啟動後,它並沒有彈出框來。百思不得其解。幸好,在服務的程式裡面,啟用了系統的日誌,它會把相關的異常記錄到系統日誌中去,在“電腦管理”的“事件檢視器”裡面可以找到。果然發現了一個,

    顯示的資訊是

   “當應用程式不是以 UserInteractive 模式運行時顯示模式對話方塊或表單是無效操作。請指定 ServiceNotification 或 DefaultDesktopOnly 樣式,以顯示服務應用程式發出的通知。”

    直接百度,找到了一個答案,原來是調用MessageBox時,還需要設定它的MessageBoxOptions屬性為DefaultDesktopOnly。修改如下:

MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);

    然後再次重新編譯,安裝並啟動,OK,順利的彈出了錯誤的資訊。

 

第二種方法:

     第二種方法就是真正的調試,其實Windows服務還是可以調試的,應該說任何一種類型的程式都應該能調試,別人在開發編譯器的時候就人考慮到的。下面來看具體的方法。

     我們知道,任何一個程式都有一個對應的進程,如果你的Windows服務啟動後,也會有一個對應的進程。通過工作管理員,就能看到。

     我們可以通過VS編譯器裡面,提供的“附加到進程”這個功能來進行調試。首先你開啟你的Windows服務來源程式,在裡面設定一個斷點,例如在OnStart方法中protected override void OnStart(string[] args){}中,然後把你的服務啟動,啟動過後,在VS的“調試”一欄中找到“附加到進程”

    在進程列表裡面找到你的進程,

      如果沒有的話,就把左下角的“顯示所有使用者的進程”前面的勾選中,然後你就可以找到你的Windows服務的進程了,然後點擊確定即可。

     點擊確定後,可能你等了半天,也沒看見它命中斷點。哈哈,不要急,前面說漏了一點,我們是先啟動的服務,然後再附加的進程,因為服務一啟動,就會執行OnStart方法,這時,我們還沒有把這個服務的進程附加到VS中去呢?所以在OnStart方法中設定的這個斷點肯定不會命中。所以我們需要想個辦法,也就是加一個定時器,我們在OnStart方法中啟動這個定時器,然後設定這個定時器的時間間隔為1分鐘,然後在這個定時器的事件中去設定一個斷點。這樣把服務重建,安裝並啟動後,把這個進程附加到VS中去,1分鐘過後,你就會看到,它命中了斷點。不過有一個前提就是,你必須在1分鐘內把這個進程附加到VS中去,否則的話,它還是命中不了。

     如果還有問題的話,就檢查一下,看你的Windows服務是不是在Release模式下產生的,如果是的話,要把它改成在Debug模式下產生。

     詳細的說明,可以參考這篇文章Windows服務(附服務開發協助工具輔助)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.