如何在Win7中调试登录屏幕保护程序?

7
我有一个.Net 2.0 WinForms应用程序,我正在尝试将其用作登录屏幕保护程序(64位Win7Pro)。当我登录并作为我的屏幕保护程序运行时,它可以在命令行上正常运行。但是,当作为登录屏幕保护程序运行时,它立即退出。
我知道它因为CLR异常而退出,因为其退出代码是0xE0434F4D,但我无法找出如何调试它。
是否有任何方法可以在Win7中调试登录屏幕保护程序?

你尝试过获取 WER localdump 吗?对于 .NET,请使用 DumpType=2。 - Thomas Weller
@ThomasW.:我正在寻找一种交互式调试的方法,而不是事后调试。 - Gabe
2个回答

0

你可以通过Visual Studio从远程计算机附加到进程来进行调试。

但是,可能有一个更简单的解决方案。WinForms应用程序有一个Program类。如果在启动Form的Program类中的代码周围放置Try-Catch语句,那么当应用程序崩溃时,您可以记录具有完整堆栈跟踪的异常。从那里,您应该能够更容易地确定问题(我的猜测是与权限相关)并进行纠正。


你如何通过VS连接到远程计算机?难道VS不必在运行屏幕保护程序的计算机上运行吗?如果是这样,那么你如何在未登录的情况下启动VS? - Gabe
请确保“Microsoft Visual Studio远程调试监视器”已安装并在需要调试的远程计算机上运行(有关详细信息,请参见http://msdn.microsoft.com/en-us/library/xf8k2h6a.aspx)。在Visual Studio的调试下,选择“附加到进程...”。将传输设置为“远程(仅本机且无身份验证)”,并将“限定符”设置为需要调试的计算机名称。 问题是您的屏幕保护程序似乎立即退出。当您设置好调试会话以附加到屏幕保护程序进程时,它早已消失。记录可能是您唯一的选择。 - Russ

0

如果你想调试登录屏幕,你需要连接内核调试器。

msvsmon和其他程序在登录屏幕上不会运行,因为没有用户会话(因为你还没有登录)。

从内核调试器调试CLR将是有趣的;使用windbg可以进行一些基本的CLR调试,但这并不简单。

你可以创建一个日志文件(或使用Windows事件跟踪, 这可以避免许多安全问题)来追踪故障。


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