【问题标题】:Console Application - Can't Catch Unhandled Exception控制台应用程序 - 无法捕获未处理的异常
【发布时间】:2008-11-28 11:30:32
【问题描述】:

我编写了一个非常简单的 C# 控制台应用程序,它将打开一个 Crystal Report,刷新它并将它作为 PDF 保存到指定位置。

在 VS2005 中运行时一切正常; pdf文件按预期生成。当我将 .exe 复制到我的根 C: 驱动器并从命令行运行它时,我得到一个对话框,指出“CrystalGenerator 已停止工作” - 但仍会生成 pdf 文件! 查找此对话框的可能原因表明发生了未处理的异常,但 Main 方法的全部内容都包含在 try/catch 中,因此这不是我的问题。

查看事件日志,我看到许多条目说明“找不到插入索引 (%1) 的替换字符串”,但找不到对此含义的合理解释。

好处是,如果我将文件复制到运行 Server 2003(它打算在其中运行)的机器上,则命令运行没有错误 - 但我想知道为什么应用程序在 Vista 上的行为异常以及如何解决它。

提前致谢。

【问题讨论】:

  • @Kent:感谢您的标签编辑等,但这是圣诞节的伙伴 - 拔掉一段时间;-)

标签: c# visual-studio-2005 windows-vista console-application unhandled-exception


【解决方案1】:

如果您从提升的命令提示符(WinKey,然后按 cmd,然后按 Ctrl+Shift+Return)运行应用程序,它是否有效?

可能是您正在调用的进程之一需要提升。

【讨论】:

  • 您看到的错误似乎与 Vista 中的事件日志问题有关:blogs.msdn.com/ericfitz/archive/2007/04/18/…(见第一条评论)
  • 您是否检查过调试器在所有异常情况下都会停止?看看 Debug -> Exceptions... 看看是否所有的框都被选中了。
  • 我启用了非托管代码调试,现在在 VS2005 中出现以下错误:CrystalGenerator.exe 中 0x074abc38 处的未处理异常:0xC0000005:访问冲突。谷歌搜索!
  • 它在以下行抛出异常:ReportDocument oRtp = new ReportDocument();
  • 请考虑编辑您的问题 - 听起来 Vista 可能不是罪魁祸首,但实际上揭示了一个问题。
【解决方案2】:

如果由于某种原因导致堆栈溢出,则无法捕获它,因为无法可靠地展开调用堆栈。

在这种情况下,您的应用程序将像您所说的那样运行。

【讨论】:

    【解决方案3】:

    好吧,经过大量的链接追逐后,这种行为看起来是“设计使然”!

    StackOverflows 自己的 Jeff Atwood 遇到了这个问题 (see here),并在 Microsoft Connect (see here) 上提出了这个问题。

    看起来我会寻找一种替代方法 - 尽管代码确实可以在 Server 2003 上运行。

    感谢 divo 提供的非常有帮助的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多