Winforms .Net应用程序无法启动。

4

我有一个标准的WinForms应用程序,在大多数计算机上运行。但是在安装了.NET 4(完整版本)的2003服务器上无法运行。

事件查看器显示:

Event Type: Error
Event Source:   .NET Runtime
Event Category: None
Event ID:   1026
Date:       4/01/2012
Time:       10:07:37 AM
User:       N/A
Computer:   DRACO
Description:
Application: start.exe
Framework Version: v4.0.30319

Description: The process was terminated due to an unhandled exception.
Exception 
Info: System.TypeInitializationException
Stack:
   at BootStrap.Program.Main(System.String[])

Event Type: Error
Event Source:   .NET Runtime 4.0 Error Reporting
Event Category: None
Event ID:   1000
Date:       4/01/2012
Time:       10:07:34 AM
User:       N/A
Computer:   DRACO
Description:
Faulting application start.exe, version 1.0.4386.17553, stamp 4f0384f3, faulting module     kernel32.dll, version 5.2.3790.4480, stamp 49c51f0a, debug? 0, fault address 0x0000bef7.

它在调用Main()时失败,所以我无法捕获错误。我该如何确定问题所在?


你试过在调试器下运行它吗? - krolth
这是在生产机器上,我不想安装开发环境。我已经安装到另一个2003的盒子上并且运行良好。 - CarbonMan
@PHemans 可以在生产机器上进行远程调试,而无需安装任何东西。远程调试器组件可以通过 xcopy 部署。我认为你现在处于一个困境中,要么需要部署修改后的二进制文件,要么需要在目标机器上以某种方式进行调试。 - JaredPar
2个回答

8
异常是一个 TypeInitializationException。当执行类型的初始化程序代码时生成异常时,就会抛出此异常。基本上是静态构造函数或静态字段的初始化。初始化的某个部分引发了异常,导致 TypeInitializationException
异常信息本身将通过 TypeName 属性说明是哪种类型引起了此问题。
很难确定是什么原因导致了这个问题。最快的方法是在调试器下启动进程,并设置它在抛出任何异常时中断。这应该立即导致您找到根本原因。

问题在于安装程序漏掉了一个新的必需程序集。该程序集与静态成员一起使用,因此应用程序在主函数之前崩溃。 - CarbonMan

8

有趣的部分在于以下内容:System.TypeInitializationException

这意味着您主要方法中使用的某个类型无法初始化。通常,静态构造函数引发异常,该异常被初始化器捕获,然后作为System.TypeInitializationException的内部异常重新抛出。在主方法中捕获异常并显示其内部异常或使用调试器。


如果BootStrap.Program.Main(System.String[])失败了,你如何在主方法中捕获异常? - CarbonMan
它在方法处失败,这意味着异常是在执行函数的指令时抛出的。因此,用try-catch块包围Main函数应该可以解决问题。 - Muepe
抱歉,没能提供帮助。我将不得不采取远程调试的方式。 - CarbonMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接