我正在努力应对一个相当困难的调试挑战,并希望有人可能会提供一些线索来完成这项工作。
这是场景:
我有一个 C# Windows 服务,它在具有管理员权限的用户帐户下运行,并在具有标准用户权限的用户帐户下启动一个单独的可执行进程。这两个进程旨在使用 WCF 进行通信。
不幸的是,当子进程启动时,它立即崩溃,事件日志中没有任何内容表明发生了什么。父进程继续运行,无一例外。
有关信息:这两个应用程序在父进程是桌面应用程序的配置中可靠地协同工作。我也成功地将父级作为 Windows 服务,但仅当两个进程在具有管理员权限的同一用户帐户下运行时。
我现在需要重新配置它们的关系来限制子进程的权限,但这是崩溃发生的时候。
为了证明我正在尝试做的事情是可行的,我创建了两个存根应用程序并以所需的配置成功启动它们。因此,我可以推断出我真正的子应用程序包含与此配置不兼容的内容,甚至在代码开始执行之前就导致崩溃。不幸的是,由于子进程是基于一些相当复杂的遗留代码,在我消除问题之前要隔离它的元素并不容易,所以我真的需要一种可靠的方法来逐步完成它。
如果我修改子进程的代码以在启动时立即启动调试,它会邀请我附加一个调试器,但无法完成附件,并显示一条消息指示The Just-in-time debugger does not have permission to debug the process
.
我也看到了这个问题,并试图实施这个提议的解决方案(看起来很有希望),但它在我的场景中无法工作。而不是在启动应用程序之前启动调试,它似乎什么都不做 - 调试器和应用程序都没有启动,并且不显示调试邀请对话框。但是,我已经验证了这种技术在我的环境中有效(通过使用它来启动 Notepad.exe),因此很明显我的应用程序或我启动它的方式有一些问题导致了问题。
如果有人有任何建议,我很乐意进行实验并分享有关我的测试结果的更多详细信息。
非常感谢您的想法,
蒂姆