处理丢失的.NET Framework(0xc0000135)崩溃更好?

时间:2014-04-14 14:30:05

标签: c# .net windows windows-xp

在没有安装正确的.NET Framework的情况下尝试在Windows XP安装上启动C#/ .NET应用程序时,应用程序只会崩溃并显示以下消息:

---------------------------
ThisApp.exe - Application Error
---------------------------
The application failed to initialize properly (0xc0000135). 
Click on OK to terminate the application. 
---------------------------
OK   
---------------------------

对于Joe用户来说,这实际上毫无意义,特别是因为错误代码可能引用除.NET Framework之外的其他内容。

是否有可能以更有意义的消息崩溃? (类似“此应用程序需要运行.NET Framework 3.0。请在http://www.example.com/下载”)

修改

好吧,我做了一些进一步的测试,发现了一些非常有趣的东西。

在干净的 Windows XP SP3安装中(安装了无.NET 框架),无论.NET Framework版本是什么,应用程序都将始终崩溃并显示上述消息目标,除了.NET 4.5和.NET 4.5.1,它们显示更糟糕的消息:

---------------------------
path\to\ThisApp.exe
---------------------------
path\to\ThisApp.exe is not a valid Win32 application.
---------------------------
OK   
---------------------------

现在Windows Vista的有趣之处在于,这些实际上在启动应用程序时会考虑 ThisApp.exe.config 文件。

在干净的 Windows Vista SP2安装(默认情况下安装 .NET 3.5 )上,针对.NET 4.0及以上使用.exe.config 导致出现以下消息:

---------------------------
ThisApp.exe - .NET Framework Initialization Error
---------------------------
To run this application, you first must install one of the following versions of the .NET Framework:

  v4.0

Contact your application publisher for instructions about obtaining the appropriate version of the .NET Framework.
---------------------------
OK   
---------------------------

现在没有.exe.config ,而是显示:

---------------------------
ThisApp.exe - .NET Framework Initialization Error
---------------------------
To run this application, you first must install one of the following versions of the .NET Framework:

  v4.0.30319

Contact your application publisher for instructions about obtaining the appropriate version of the .NET Framework.
---------------------------
OK   
---------------------------

我知道,这是一个非常小的变化,但我会带着这个来到某个地方。有趣的是,即使面向.NET 4.5和4.5.1,版本号(v4.0或v4.0.30319)也保持不变。

现在进行干净的 Windows 7 SP1安装(默认安装 .NET 4.0客户端配置文件),以.NET 4.0(完整版)和为目标.exe.config 会导致显示the message that was mentioned here

---------------------------
ThisApp.exe - .NET Framework Initialization Error
---------------------------
To run this application, you first must install one of the following versions of the .NET Framework:
  .NETFramework,Version=v4.0

Would you like to download and install .NETFramework,Version=v4.0 now?
---------------------------
Yes   No   
---------------------------

现在这条消息更像是它。当分别针对.NET 4.5和4.5.1时,该版本也会更改为v4.5和v4.5.1。

然而,没有.exe.config,应用程序正常启动,即使面向.NET 4.0(完整版)及更高版本(甚至4.5)。我想如果我实际上使用的是.NET 4.0或4.5及更高版本的任何功能,应用程序最终会崩溃,但我仍然觉得它非常有趣。假设您可以在应用程序内部检查.NET的正确版本。

我无法在Windows 8 / 8.1上进行测试,但我认为它与Windows 7相同。

无论哪种方式,这都不是一个解决的问题,至少在Windows XP上仍然存在很大的安装基础。

另外,请停止告诉我使用安装程序。我知道。这不是这个问题的关键。

1 个答案:

答案 0 :(得分:1)

  

对于Joe用户来说,这实际上毫无意义,

Joe用户只应启动已安装的程序。安装程序负责处理先决条件。

  

是否有可能以更有意义的消息崩溃?

不,因为你没有崩溃。不是在.NET中。创建.NET时,microsoft使文件向后兼容。它是可执行文件中的本机初始化代码 - 而不是.NET代码中的内容。没有运行时,.NET代码无法运行。

有趣的是,这是一个已解决的问题。您正在使用一个完全过时的.NET版本,因为它已在最新版本(.NET 4.0向上)中修复,并带有更有意义的对话框。

http://blogs.msdn.com/b/dotnet/archive/2012/03/07/optimizing-the-net-framework-deployment-experience-for-users-and-developers.aspx

有参考。取决于直接导致下载/安装对话框的Windows版本。

.NET 3.0非常古老。