Windows 7 .NET 3.5.1 – 2.0稍微损坏,如何修复?

我的Windows 7包括.NET安装(3.5到2.0)出现非常轻微,特别是损坏,我试图修复它,而无需重新安装Windows或尝试恢复到备份。

一切正常,然后我的硬盘驱动器开始腐蚀几个文件和检查磁盘发现坏簇,所以我映像驱动器到一个新的。 一旦我在新的驱动器上启动一切工作, 除了在.NET 3.5到2.0(如Ping()和IsNetworkAvailable())中调用System.Net.NetworkInformation方法的程序,立即崩溃调用的应用程序在.NET 4.0中的这些调用工作正常)。 这些方法在System.dll中find,我认为调用本地方法,我相信是在winnsi.dll或iphlpapi.dll或其他(我还没有find这个); 我认为它调用本地方法,因为导致崩溃的exception是致命的执行引擎错误,人们提到它通常涉及调用本地方法和编组之间的数据。

关于罪魁祸首的一个巨大线索可能发现的事实是,当我通过代码分析器(执行exe并捕获哪些方法花费最长时间的统计信息)启动完全相同的崩溃应用程序时,该应用程序工作正常,根本没有崩溃! 如何在剖析器中运行它并在外部运行不起作用? 这似乎是神秘的关键。

  • 我已经使用procmon从崩溃的执行和分析器运行成功的执行捕获所有的registry,文件系统和networking事件,并比较了两个输出,但没有学到太多(我看到的时候,非分析的应用程序崩溃,但直到那时他们的行为相同,加载相同的模块,)。 唯一很大的区别似乎是,在应用崩溃之前,profiler执行的代码创build了4-6个新线程,直接执行的代码只创build了1-2个。
  • 我已经diffd的文件/目录,似乎最相关的(在Windows和程序文件的.NET的东西)前和后磁盘的麻烦,并没有看到任何改变,我没有想到任何(没有明显的文件损坏)。
  • 我已经分析了软件和系统registry麻烦前后磁盘的麻烦,并没有看到任何相关的变化。
  • 我创build了一个新的用户帐户,并在环境相关的情况下清理了任何环境variables。 不用找了。
  • 我做了“SFC / SCANNOW”,发现没有完整性问题。
  • 我试过“ngen update”来重新生成预编译的代码,以防万一我错过了可能被破坏的东西,而且没有任何改变。

我假设我需要修复我的.NET安装,但是因为Windows 7包含.NET 3.5 – 2.0,您不能只是重新运行.NET安装程序来重做它。 我无法访问Windows磁盘以尝试重新安装Windows(计算机具有恢复分区,但无法使用); 该驱动器使用全盘encryption解决scheme,重新安装将是困难的。

我绝对不希望从头开始,安装一个新的Windows,重新安装几十个软件包,尝试和记住几十个与开发相关的定制/等等。

鉴于所有这些…有没有人有任何有用的build议? 我需要.NET 3.5 – 2.0的工作,因为我是一个开发人员,需要build立和testing它。

谢谢!

Quinxy

简单的答案是我的System.ni.dll文件被损坏,我将其replace,一切正常。

我记得我应该重新检查chkdsk日志,我一直列出由于驱动器故障而损坏的文件。 失败后,我已经把所有列出的文件ID转换成文件path/名称,我已经replace了所有可以从备份的100多个文件,但是当我现在回去的时候确定已经足够了,看上去我发现了一个笔记,虽然我已经replace了4或5 .NET相关的文件成功有一个这样的文件,我无法取代,因为它在当时“正在使用”。 那个文件? System.ni.dll! 我现在能够从备份replace这个文件,瞧,我的NET安装恢复正常,应用程序工作是否分析或不。

令人沮丧的是,当这个事件第一次发生时,我完全预料到这个问题涉及到一个损坏的文件,特别是一个名为System.dll的文件,这个文件包含了失败的方法。 所以我扩散和rediffed所有名为System.dll的文件。 但是当时我并没有意识到System.ni.dll是System.dll(或者其他)的本地编译performanceforms。 而因为我已经diff和rediffed与.NET相关的目录,并没有注意到这一点(不知道我是如何错过了),我放弃了这种做法。

无论如何…长话短说,这是一个损坏的System.ni.dll引起了我的问题,其中的一个或多个集群的内容已被replace为0x0,它恰好如我所看到的奇怪的问题。