我们已经为我们的应用程序添加了一个UnhandledException处理程序,但它似乎并不总是触发。在某些虚拟机上,它对我来说很好,但对于我的一个同事,它从不运行附加的委托。我们创建一个由我们的应用程序保持活着的对象,其唯一目的是侦听未处理的异常:
public UnhandledExceptionTracker()
{
AppDomain.CurrentDomain.UnhandledException += TrackUnhandledException;
}
我能够通过以管理员身份运行应用程序来重现我的计算机上的问题,但我的同事并没有这样做(据我们所知)。与我的帐户相比,运行该应用程序的Windows用户似乎也没有任何提升的权限。
我已经检查了类似的问题,并且没有任何建议似乎有所作为 - SecurityPermissions属性,ThreadException通过WinForms Application对象处理(不是我们应用程序的情况)。
我们的应用程序是本机C ++,使用Visual Studio 2013编译器(v120)构建,并使用.Net 4.5.1作为托管组件。双方之间的连接是通过C ++ / CLI完成的。在应用程序启动时,我们的本机代码会旋转UnhadledExceptionTracker对象并保持它。
我测试了UnhadledExceptionTracker被创建和销毁时弹出消息框的行为(如果应用程序按预期崩溃,则永不销毁),以及未处理的事件处理程序运行时(为我运行,而不是以管理员身份运行,而不是我的同事)。
是否有任何人遇到过类似的问题,可能知道如何为任何用户开展这项工作?
编辑:经过进一步调查后,似乎这可能只是某些例外类型的问题,而不仅仅是针对不同的用户/权限设置。
在原始测试中,删除在运行时加载的托管库(而不是在应用程序启动时),将抛出托管的System.IO.FileNotFoundException,但UnhandledException处理程序将无法运行。 / p>
在执行期间抛出本机std :: exception会导致UnhandledException运行。