當前位置:首頁 » 城管服務 » 調試服務

調試服務

發布時間: 2021-01-10 07:39:36

⑴ C#寫服務怎麼調試

第一種方案:復使用附加制至進程,直接附加到服務中即可。但這種方式不大適合未處理錯誤崩了的情況

第二種方案:
1. 更改項目的輸出類型由Windows 應用程序為控制台應用程序
2. 在調試設置頁面啟動選項的命令行參數中隨意輸入幾個字元,如DEBUG
3. 關鍵的地方來了,轉到Program.cs頁面的Main函數處,手動加入一個參數,如static void Main(string[] args)
4. 在Main中更改代碼
if(args.Length==0)//這是服務啟動的條件
{
//將原有生成的啟動服務的代碼拷貝至此處
}
else//即有啟動選項的命令行參數DEBUG了
{
//將服務中的類當作一個普通類來使用即可,如
***Service srv = new ***Service();
srv.DoSomeThing();
Console.Read();
}
5. 調試時,直接在項目處點擊滑鼠右鍵,選擇 調試—啟動新實例,這樣就進入了else模式,就可以不用作為服務來運行了。

⑵ 如何跟蹤和調試Windows服務

1、調試windows 服務是system級別復的所有在制win7或win8下一定要以管理員身份啟動,啟動後添加新建項目windows服務
確定就建立了一個windows服務程序
2、程序入口點自然在program中 main函數 跟控制台程序有點相似
static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
}
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}

⑶ 怎樣調試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 service

第一方法:
這種方法其實說起來不叫調試,也是一種笨辦法,就是用MessageBox把一些程序的中間信息輸出來,方便你找出程序是在哪個地方出問題了,你也可以在try catch中使用,用MessageBox把異常彈出來,這種方法也比較直觀。可惜,實現起來也有問題。我們首先要添加using System.Windows.Forms;的引用,然後加上一行代碼MessageBox.Show(ex.ToString(),"Error");本以為這樣說行了,可是把服務重新編譯生成,並安裝啟動後,它並沒有彈出框來。百思不得其解。幸好,在服務的程序裡面,啟用了系統的日誌,它會把相關的異常記錄到系統日誌中去,在「計算機管理」的「事件查看器」裡面可以找到。果然發現了一個,
clip_image002
顯示的信息是
「當應用程序不是以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的「調試」一欄中找到「附加到進程」
clip_image004
在進程列表裡面找到你的進程,
clip_image006
如果沒有的話,就把左下角的「顯示所有用戶的進程」前面的勾選中,然後你就可以找到你的Windows服務的進程了,然後點擊確定即可。
點擊確定後,可能你等了半天,也沒看見它命中斷點。哈哈,不要急,前面說漏了一點,我們是先啟動的服務,然後再附加的進程,因為服務一啟動,就會執行OnStart方法,這時,我們還沒有把這個服務的進程附加到VS中去呢?所以在OnStart方法中設置的這個斷點肯定不會命中。所以我們需要想個辦法,也就是加一個定時器,我們在OnStart方法中啟動這個定時器,然後設置這個定時器的時間間隔為1分鍾,然後在這個定時器的事件中去設置一個斷點。這樣把服務重新生成,安裝並啟動後,把這個進程附加到VS中去,1分鍾過後,你就會看到,它命中了斷點。不過有一個前提就是,你必須在1分鍾內把這個進程附加到VS中去,否則的話,它還是命中不了。
如果還有問題的話,就檢查一下,看你的Windows服務是不是在Release模式下生成的,如果是的話,要把它改成在Debug模式下生成。
詳細的說明,可以參考這篇文章Windows服務(附服務開發輔助工具)

⑸ VS C# 怎麼調試調試服務

調試Windows服務
調試Windows服務比普通應用程序要困難些,需要很多步驟。服務不能像普通應用程序那樣在開版發環境中直接執行來調試,它必須先安裝並啟動。一旦啟動了它,你可以用Visual Studio附加到進程來調試代碼。記住,對Windows服務做的任何改動,你都需要卸載並重新安裝它。
附加到運行的Windows服務
要調試服權務,你需要按如下步驟附加到Windows服務。這里假設你已經安裝了服務並成功啟動了它。
1. 在Visual Studio中打開項目
2. 選擇調試
3. 選擇附加到進程
4. 打開選擇所有用戶的進程
5. 在可用進程中選擇你的進程
6. 點擊附加
7. 在timer1_Elapsed方法里設置一個斷點,等待它的執行

⑹ 怎樣在伺服器中調試.net程序

由於服務必須從服務控制管理器的上下文中運行,而不是從 Visual Studio .NET 中運行,因此調試服務不像調試其他 Visual Studio 應用程序類型那樣簡單。若要調試服務,必須首先啟動服務,然後將一個調試器附加到正在運行服務的進程中。然後可以使用 Visual Studio 的所有標准調試功能來調試應用程序。
調試 OnStart 方法可能比較困難,因為 Windows 服務管理器將所有嘗試啟動服務的時間限制在 30 秒內。調試 Windows 服務。
安裝您的服務。
可從服務控制管理器、「伺服器資源管理器」或代碼啟動服務。
在 Visual Studio 中,從「調試」菜單中選擇「進程」,出現「進程」對話框,單擊「顯示系統進程」。
在「可用進程」區域內單擊服務的進程,然後單擊「附加」。
提示 此進程將與服務的可執行文件同名,出現「附加到進程」對話框。
選擇任意適當選項,然後單擊「確定」關閉對話框。注意 現在已處於調試模式。
設置要在代碼中使用的任意斷點。
訪問服務控制管理器並操縱服務,並發送停止、暫停和繼續命令以命中您的斷點。

⑺ 如何調試Windows服務

第一方法: 這種方法其實說起來不叫調試,也是一種笨辦法,就是用把一些程序的中間信息輸出來,方便你找出程序是在哪個地方出問題了,你也可以在try catch中使用,用MessageBox把異常彈出來,這種方法也比較直觀。可惜,實現起來也有問題。我們首先要添加using System.Windows.Forms;的引用,然後加上一行代碼MessageBox.Show(ex.ToString(),"Error");本以為這樣說行了,可是把服務重新編譯生成,並安裝啟動後,它並沒有彈出框來。百思不得其解。幸好,在服務的程序裡面,啟用了系統的日誌,它會把相關的異常記錄到系統日誌中去,在「計算機管理」的「事件查看器」裡面可以找到。果然發現了一個,
clip_image002
顯示的信息是
「當應用程序不是以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的「調試」一欄中找到「附加到進程」
clip_image004
在進程列表裡面找到你的進程,
clip_image006
如果沒有的話,就把左下角的「顯示所有用戶的進程」前面的勾選中,然後你就可以找到你的Windows服務的進程了,然後點擊確定即可。
點擊確定後,可能你等了半天,也沒看見它命中斷點。哈哈,不要急,前面說漏了一點,我們是先啟動的服務,然後再附加的進程,因為服務一啟動,就會執行OnStart方法,這時,我們還沒有把這個服務的進程附加到VS中去呢?所以在OnStart方法中設置的這個斷點肯定不會命中。所以我們需要想個辦法,也就是加一個定時器,我們在OnStart方法中啟動這個定時器,然後設置這個定時器的時間間隔為1分鍾,然後在這個定時器的事件中去設置一個斷點。這樣把服務重新生成,安裝並啟動後,把這個進程附加到VS中去,1分鍾過後,你就會看到,它命中了斷點。不過有一個前提就是,你必須在1分鍾內把這個進程附加到VS中去,否則的話,它還是命中不了。
如果還有問題的話,就檢查一下,看你的Windows服務是不是在Release模式下生成的,如果是的話,要把它改成在Debug模式下生成。
詳細的說明,可以參考這篇文章Windows服務(附服務開發輔助工具)

⑻ 如何用OD調試windows服務程序

不知你說的是sys文件么?
你想用R3
調試器
去調試R0程序?
恐怕就只能想想了
所以,用WinDbg吧,「正宗」的R0動態調試器。
微軟出品,值得信賴。
希望有幫助。

⑼ 如何調試 Windows 服務

若要調試服務,必須首先啟動服務,然後將一個調試器附加到正在運行服務的進程中。
然後可以使用 Visual Studio 的所有標准調試功能來調試應用程序。
例如,如果附加到 WinLogon 進程,然後停止調試,系統就會暫停,因為沒有 WinLogon,系統無法運行。
只能將調試器附加到正在運行的服務。
附加進程會中斷服務的當前運行;它並不真正終止或暫停服務的處理。
也就是說,如果開始調試時服務正在運行,則在進行調試時,該服務從技術上說仍處於「已啟動」狀態,但它的處理已掛起。
附加到服務的進程使您能夠調試大多數服務代碼,但並非全部;例如,由於服務已經啟動,因此不能用這種方法調試服務的OnStart方法中的代碼,或調試用於載入服務的Main方法中的代碼。
解決此問題的一個方法是:在唯一作用是幫助調試的服務應用程序中創建一個臨時服務。
可以將兩個服務都安裝上,然後啟動此「虛擬」服務載入服務進程。
臨時服務啟動了進程後,就可以使用 Visual Studio 中的「調試」菜單來附加到服務進程。
當附加該進程之後,可以設置斷點並使用這些斷點來調試代碼。
當退出用於附加到該進程的對話框時,實際上已處於調試模式。
您可以使用「服務控制管理器」
開始、停止、暫停和繼續您的服務,因此命中已設置的斷點。
調試成功後,移除此「虛擬」服務。
說明調試OnStart方法可能比較困難,因為 Windows 服務管理器將所有嘗試啟動服務的時間限制在 30 秒內。

熱點內容
影視轉載限制分鍾 發布:2024-08-19 09:13:14 瀏覽:319
韓國電影傷口上紋身找心裡輔導 發布:2024-08-19 09:07:27 瀏覽:156
韓國電影集合3小時 發布:2024-08-19 08:36:11 瀏覽:783
有母乳場景的電影 發布:2024-08-19 08:32:55 瀏覽:451
我准備再看一場電影英語 發布:2024-08-19 08:14:08 瀏覽:996
奧迪a8電影叫什麼三個女救人 發布:2024-08-19 07:56:14 瀏覽:513
邱淑芬風月片全部 發布:2024-08-19 07:53:22 瀏覽:341
善良媽媽的朋友李采潭 發布:2024-08-19 07:33:09 瀏覽:760
哪裡還可以看查理九世 發布:2024-08-19 07:29:07 瀏覽:143
看電影需要多少幀數 發布:2024-08-19 07:23:14 瀏覽:121