无法在Win7操作系统中使用VS2010调试Windows服务

3

我从XP和VS2005迁移到Win7和VS2010后,无法调试任何一个服务。

我可以编译、安装和正常运行服务。

但是,我需要进行调试。当我尝试附加到进程时,选择与在VS2005中一样的正在运行的进程后,我收到一个告诉我需要管理员权限的错误提示。

我已经是管理员。此外,在互联网上搜寻了很多之后,我发现通过右键以管理员身份运行VS2010应该可以解决问题,但我仍然不行。

我还尝试在vslauncher.exe属性中勾选复选框,始终以管理员身份运行它。VS2010窗口顶部显示它确实正在以管理员身份运行,但再次尝试附加到进程时,它说我需要管理员权限。

有人知道如何解决吗?


如果您启动任务管理器并右键单击您的服务,然后选择“调试”,是否会出现相同的行为/问题? - Ricibob
嗨Ricibob。它说:“刚好在调试此异常时失败,出现以下错误:已登录的用户无权调试崩溃的应用程序”。但是,应用程序并没有崩溃!服务仍在运行并正常工作... - garfield185
嗯,这听起来有点奇怪。一个可能的解决方法是将服务服务器托管在命令行应用程序中,而不是作为服务进行调试 - 这样可以使调试变得更容易 - 但可能不适用于您的情况。 - Ricibob
这一定是Win7安全系统出了问题...在XP上,我可以轻松地调试相同的项目。无论如何,我没有听说过如何在cmdline应用程序中进行调试服务...你知道有关如何做到这一点的任何网页或教程吗? - garfield185
这取决于您的服务器代码结构。例如,在 WCF 中,服务器只是一个类,可以通过服务(部署)或命令行应用程序(开发/调试)进行托管,但是您的服务器代码可能已经硬编码到服务中(这不是一个好的设计-如果您可以将服务代码与服务器代码分离,那么建议这样做)。 - Ricibob
很抱歉,我不了解WCF,这些服务是普通的Windows服务,而不是WCF。因此,我没有服务器代码和服务代码。我只有我认为是服务代码的东西。 - garfield185
2个回答

4
这是一个权限问题。Win7带有新的安全系统,即使是管理员,我也必须添加此权限到我的配置文件中:控制面板->管理工具->本地安全策略->本地策略->用户权限分配->调试程序->添加用户或组。在那里,我添加了自己的用户。重启机器(非常重要!!不重启将无法生效)。之后,我就能够附加进程进行调试了。解决这个问题花费了很长时间,希望能帮助其他遇到同样问题的人们。感谢大家的帮助。

3

编辑你的服务,并将以下行放入OnStart()方法中:

Debugger.Launch(); 很重要的是,你必须在OnStart()中执行此操作,而不是通过OnStart()启动的线程,这样如果有任何错误,你就可以在服务崩溃之前捕获它。

当你的服务启动时,调试器会打开。然后Windows会自动启动Visual Studio并提升权限以便你可以附加到你的服务上。我发现使用app.config设置来添加此行非常有用,这样你可以根据需要启用它(例如:启动并附加调试器到服务)。

另外,当你使用Vista / Windows 7时,你可以以管理员身份运行应用程序。但是,除非你使用“提升”权限启动它们,否则这些应用程序会明确拒绝管理员特权。这是一项名为UAC的安全功能。


嗨,Spence!非常感谢你的帮助,Debugger.Attach()这个方法(我之前不知道)将会对我调试服务开头的那部分代码有很大帮助,因为以前我无法到达那里。然而,那个附加服务的问题并没有通过这种方式解决,因为它是一个权限问题。无论如何,非常感谢你的帮助!! - garfield185

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接