发布应用程序时的异常控制?

时间:2014-05-28 13:32:19

标签: c# winforms exception-handling release

对某些人来说可能是一个明显的问题,但却找不到重复的内容。

我正在打包我正在研究的Windows Forms解决方案的最终版本,并准备好进行在线分发。这样做的最佳做法是什么?我们在打包安装文件方面遇到了一些麻烦,并且遇到了在不同的PC上测试程序的障碍,包括32位和64位。

更具体地说,应该“扔”;命令在最终版本中被注释掉或留下?这会暴露解决方案本身的任何内部工作吗?

3 个答案:

答案 0 :(得分:2)

保持所有异常处理不受影响。

将事件添加到应用程序中的起始表单,并附加到Application.UnhandledException事件。如果异常传播堆栈,则会触发。

这是告知用户应用程序崩溃的要点。在此处记录错误,然后正常中止。


关于揭示内部因素的观点,由您决定。如果您愿意,可以对源代码进行模糊处理,但如果您要在发布构建模式下发布,而您没有提供.PDB,那么这是第一步。

最终,无论如何都可以对DLL / EXE进行反编译,因此它取决于您。调试模式将显示比释放模式更多,但不多。

答案 1 :(得分:2)

发生异常时,发布的应用程序不应该崩溃。您需要通知用户,出现问题并记录您的异常,但您不想崩溃!告知用户应该以友好的方式完成,而不仅仅是将exception.ToString()放入消息框中。

最好添加Application.ThreadExceptionAppDomain.CurrentDomain.UnhandledException处理程序来处理应用程序中的所有异常。如何做到这一点,将在以下主题中回答:Catch Application Exceptions in a Windows Forms Application 但是,请确保您的应用程序在可用状态下仍然存在,即以适当的方式处理应用程序的异常。

我通常添加一个预处理器指令来处理应用程序级别的异常,因为我希望它们在调试时进行trow。例如:

#if !DEBUG 
   Application.ThreadException += new ThreadExceptionEventHandler(MyHandler);
#endif

还应该提到的是,如果你有预期可能发生异常的代码片段,例如网络通信错误,你应该明确地处理这些片段。我所说的是,我们不应该完全忘记异常处理,因为我们在应用程序级别配置了未处理的异常处理程序。

答案 2 :(得分:0)

理想情况下,你应该抓住throw;以上的任何东西。仔细检查您的代码并尝试确保适当处理抛出的异常。记录未处理的异常 - 您可以在Windows事件查看器中看到此信息。根据您放入的详细信息,未处理的异常可以提供有关应用程序内部工作方式的线索。但是,我建议未处理的异常是一个糟糕的信息来源,任何想知道你的应用程序如何工作的人都可以简单地反汇编它,除非你对它进行了混淆。

使用try / catch块的周围代码无法捕获某些异常,因此您的应用程序也应该实现an unhandled exception handler。这使您有机会向用户显示错误消息并执行异常操作 - 记录,发送给支持,丢弃等等。