2012-01-03 122 views
4

我有一个标准的winforms应用程序,可以在大多数机器上运行。在安装了.Net 4(完整版)的2003服务器上,它无法运行。Winforms .Net应用程序不会启动

的事件查看器显示:

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()的调用,所以我不能捕获的错误。我如何知道问题是什么?

+0

你尝试在调试器下运行它吗? – krolth 2012-01-03 23:56:16

+0

它在生产机器上,我宁愿不安装开发环境。我已经安装到另一个2003盒子,它运行正常。 – 2012-01-04 00:05:52

+0

@PHemans可以在生产机器上进行远程调试而无需安装任何东西。远程调试器组件是xcopy可部署的。我认为你真的陷入了困境,你可能需要1)在目标机器上部署一个修改的二进制文件或2)调试 – JaredPar 2012-01-04 00:07:49

回答

8

例外是TypeInitializationException。当生成执行类型的初始化程序代码的异常时会引发这种情况。基本上是静态构造函数或静态字段的初始化。初始化的某些部分抛出异常,导致产生一个TypeInitializationException

异常信息本身会通过TypeName属性说明导致此异常的类型。

很难说一定是什么原因导致了这个问题。找出最快的方法是在调试器下启动该进程,并将其设置为在任何抛出的异常中断。这应该立即引导您找到根本原因。

+0

问题是安装程序错过了新的必需组件。该程序集与静态成员一起使用,因此该应用程序在主程序之前崩溃。 – 2012-01-04 00:59:01

8

有趣的部分是:System.TypeInitializationException

这意味着,在你的主要方法所使用的类型之一初始化失败。通常情况下,静态constructor正在抛出一个由初始化程序捕获的异常,然后重新抛出,作为System.TypeInitializationException的内部异常。在主方法中捕获异常并显示其内部异常或使用调试器。

+0

如果在BootStrap.Program.Main(System.String [])失败,如何捕获主方法中的异常? – 2012-01-04 00:35:53

+0

它的方法失败,意味着在执行函数指令时抛出异常。因此,使用try-catch块围绕Main函数应该可以工作。 – Muepe 2012-01-04 00:38:45

+0

对不起,没有帮助。我将不得不走远程调试的路线 – 2012-01-04 00:52:11