2012-12-29 66 views
5

我正在构建一个需要完整版本.Net(4.0或3.5)的ExcelDNA插件(我正在使用System.Web的某些部分)。正因为如此,只有客户端版本的用户才会遇到错误。检查是否安装了.net的完整版本?

如果只安装了客户端版本,我喜欢在启动时提示用户使用“获取最新版本”弹出窗口。

是否有任何万无一失的方法来检查是否安装了完整版本?通过谷歌搜索似乎很多人建议检查注册表,这似乎很容易出错,因为有许多.Net版本。在我需要什么样的路径进行检查,建立这样一个案例:

bool IsFullDotNetVersion() 
{ 

} 

这将是检查是否存在的功能,只是提供了完整版可能/好主意吗?即是否可以检查System.Web是否存在于环境中? (不包含在.Net的客户端版本中)

作为一个侧面的问题:如何在我的系统上安装不同的.net版本,轻松测试我的应用程序。有没有.Net切换器?

+0

您需要阅读注册表设置。检查[这](http://stackoverflow.com/a/199783/649524)优秀的答案 – Tilak

+0

我不问什么.NET版本安装。我问是否安装了完整版本。该帖子不回答我需要检查确定的确切的注册表项。 –

+0

您可以检查.NET Full Profile注册表设置 – Tilak

回答

2

请在GAC中查看System.Web(或您需要的任何组件)是否存在。

下面是一些代码,即works on my machine

private static const string BasePath = @"c:\windows\assembly"; 

public static bool HasDotNetFullversion() 
{ 
    var gacFolders = new List<string>() 
    { 
     "GAC", "GAC_32", "GAC_64", "GAC_MSIL", 
     "NativeImages_v2.0.50727_32", "NativeImages_v2.0.50727_64" 
    }; 

    var assemblyFolders = from gacFolder in gacFolders 
          let path = Path.Combine(BasePath, gacFolder) 
          where Directory.Exists(path) 
          from directory in Directory.GetDirectories(path) 
          select directory; 

    var hasSystemWeb = assemblyFolders.Any(x => 
     x.EndsWith("system.web", StringComparison.InvariantCultureIgnoreCase)); 
} 
1

可能的重复。 How to detect what .NET Framework versions and service packs are installed?简单的答案是,你需要阅读注册表

+0

是的,但注册表项是什么? .net 4.0清楚,但对于.net 3.5? –

+0

如果您单击上述评论中的链接,请参阅参考表格。通常安装程序处理框架检查问题,我建议您使用一个。他们还处理卸载问题。 –

+0

@NielsBosma:该框架的客户端配置文件版本首次在4.0中可用。您可能需要查看以下内容:http://msdn.microsoft.com/en-us/library/bb822049.aspx和http://msdn.microsoft.com/en-us/library/hh925568.aspx以及链接麦克提供。 – NotMe

0

我会建议,而不是尝试和检测客户端计算机的.net版本,您可能只需将完整的.net安装程序捆绑到您的安装程序。

换句话说,在安装时检测它并采取适当的措施。这是处理潜在缺失框架部分的常用方法。

+1

因为这是一个Excel插件,我不提供安装程序。当你想使用插件时,它是拖放的。 –

相关问题