2012-04-20 106 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