我一直在开发一个VB.Net Windows服务。它使用用C ++开发的COM类。
我无法将其用作真正的服务,因为我使用未注册的第三方控件显示唠叨屏幕,因此服务崩溃了。管理层昨天终于买了它,所以我刚刚开始在服务模式下测试它。
前段时间我曾经在应用程序开始时调用了DebugBreak()来调试c ++ windows服务。 对于.NET我发现了这个: How to debug a windows service using breakpoints?
到目前为止,这么好;但是在服务模式下运行时,COM对象上的方法调用失败,错误代码为0x80004003,但它可以作为应用程序正常工作。
问题是我无法调试COM代码。如果我在我的vs会话中加载一个cpp并放入一个断点,它会被忽略,因为即使在创建COM对象之后也没有加载符号。如果我在C ++代码中放入DebugBreak,它会在.Net中引发异常,但不要求我调试代码。在服务项目中,选中“启用非托管代码调试”。
我也试过使用COM类项目,但没有成功。
有什么想法吗?
编辑 - 2011-01-03:要回答Chris O的问题,是的,我可以将这个过程作为SYSTEM运行,但是,这对我有什么帮助?如果一切都像SYSTEM一样,那是因为我需要一些权限吗?
是的,我能够将调试器附加到进程,具有上述限制:在Visual Studio 2005的“附加到进程”对话框中,该服务不会出现在进程列表中,所以我有使用Debug.Assert调用或类似方法。另外,我只能调试.Net代码;我无法调试本机代码。