2012-04-20 67 views
2

從XP和VS2005遷移到Win7和VS2010後,我無法調試任何服務。無法調試windows服務VS2010 Win7

我可以編譯,我可以安裝,我可以正確運行服務。

但是,我需要調試它們。當我嘗試附加到流程時,我會像VS2005一樣選擇正在運行的流程,並且收到一條錯誤消息,告訴我需要管理員權限。

我已經是管理員。另外,在網上搜索了很多東西之後,我發現以管理員身份運行VS2010(通過右鍵單擊)應該可以修復它,但是我仍然不能。

我也嘗試將vslauncher.exe屬性上的複選框標記爲始終以管理員身份運行。 VS2010窗口顯示它實際上是以管理員身份運行的,但是當我嘗試附加到該過程時,它說我需要管理員權限。

有沒有人有任何想法如何進行?

+0

如果啓動TaskManager並右鍵單擊您的服務並選擇「調試」,是否會得到相同的行爲/問題? – Ricibob 2012-04-20 09:15:36

+0

嗨Ricibob。它說「及時調試此異常失敗,出現以下錯誤:登錄用戶無權訪問調試崩潰的應用程序」。但是,應用程序不會崩潰!該服務仍在運行,並正常工作... – garfield185 2012-04-20 09:21:20

+0

嗯,這聽起來有點奇怪。可能的解決方法是在調試時將服務服務器託管在cmdline應用程序中而不是服務中 - 使調試更容易 - 但可能不適用於您的情況。 – Ricibob 2012-04-20 09:24:04

回答

3

這是一個權限問題。 Win7自帶一個新的安全系統,我必須添加到我的個人資料(即使是管理員)此權限:

控制面板 - >管理工具 - >本地安全策略 - >本地策略 - >用戶權限分配 - >調試程序 - >添加用戶或組。

在那裏,我添加了我自己的用戶。重新啓動機器(重要!無需重新啓動,它不會工作)。

之後,我能夠附加進程來調試它們。解決這個問題已經很長時間了,我希望能夠幫助其他人找到同樣的問題。

謝謝大家的幫助。

3

編輯爲您服務,並把下面一行到的OnStart()方法:

Debugger.Launch();在OnStart()中執行此操作非常重要,而不是由OnStart()啓動的線程執行此操作,以便在出現任何錯誤時您可以在服務崩潰之前捕獲它。

當您的服務啓動時,調試器將打開。 Windows隨後會提供自動啓動提升的視覺工作室,以便您可以附加到您的服務。我發現將這行代碼放入app.config設置非常有用,因此您可以根據需要啓用它(即啓動並附加調試器以進行服務)。

僅供參考當您使用Vista/Windows 7時,您可以以管理員身份運行應用程序。但是,除非您使用「提升」權限啓動它們,否則這些應用程序顯式拒絕管理權限。這是一項名爲UAC的安全功能。

+0

嗨斯彭斯!很大的幫助,Debugger.Attach()這個(我不知道的)會幫助我調試那個服務的開始部分,這是我以前無法達到的。但是,附加服務的問題並沒有解決,因爲這是一個權限問題。無論如何,非常感謝您的幫助! – garfield185 2012-04-23 08:37:50