【发布时间】: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