【问题标题】:C# Exception not thrown after installation安装后未抛出 C# 异常
【发布时间】:2016-11-24 10:56:20
【问题描述】:

我们在Main() 中使用try-catch-block 来捕获应用程序的所有异常并将它们写入lgo 文件。在 VS2012 的发布配置中一切正常。抛出异常并保存到文件中。

使用 WIX 创建安装程序并安装应用程序后,直接抛出异常(并显示为对话框),但不会被 Main() 中的 try-catch-block 捕获,因此不再保存在文件中。如何在Main() 中捕获异常?

这是 Program.cs 中的代码:

[STAThread]
    static void Main()
    {
        try
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
        catch (Exception ex)
        {
            ExceptionLog.SaveExceptionCloseApp(Program.RuntimeGUID, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex);
        }
    }

【问题讨论】:

  • “保存到文件”到底是什么意思?你到底在做什么?向我们提供一些在调试时工作的代码,但在安装后不工作。
  • Program.cs的添加代码
  • 是否会发生异常,因为一旦您通过 WiX 生成的 MSI 安装了您的应用程序,安装文件夹不包含所有必需的二进制文件?然后执行将在 before Main 之前失败,因此不会被您的 try/catch 块捕获。我还建议使用 FusLogVw 工具检查是否所有必需的程序集都可用。
  • 您确定 WiX 正在使用正确的构建配置构建设置吗?可能是它使用了代表早期版本代码的调试配置的问题。
  • 此代码只有在您使用调试器运行时才会显示异常。如果没有,就会引发 Application.ThreadException 事件。考虑为它编写自己的事件处理程序。

标签: c# visual-studio-2012 installation wix wix3.8


【解决方案1】:

这对我们有用:
@Hans Passant:感谢您的解决方案。

    [STAThread]
    static void Main()
    {           
        Application.ThreadException += Application_ThreadException;

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }

    static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
    {
        ExceptionLog.SaveExceptionCloseApp(Program.RuntimeGUID, System.Reflection.MethodBase.GetCurrentMethod().Name + "()", e.Exception);
    }

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2015-02-19
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多