• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Tony Qu
我的软件工作室
博客园    首页    新随笔    联系   管理     

如何检测是否安装了.NET 2.0和.NET 3.0

代码来自Paint.NET的PaintDotNet.SystemLayer.OS类

这段代码是通过检查注册表中的项来确定.NET 2.0/3.0是否安装的。由于Paint.NET是由微软员工参与开发的,可以认为这是比较准确的判断方法。大家借鉴一下检测方法就可以了,不用太在意实现,在C++中这种检测方法同样可以实现。

        private static bool IsDotNet2VersionInstalled(int major, int minor, int build)
        
{
            
const string regKeyNameFormat = "Software\\Microsoft\\NET Framework Setup\\NDP\\v{0}.{1}.{2}";
            
const string regValueName = "Install";

            
string regKeyName = string.Format(regKeyNameFormat, major.ToString(CultureInfo.InvariantCulture),
                minor.ToString(CultureInfo.InvariantCulture), build.ToString(CultureInfo.InvariantCulture));

            
return CheckForRegValueEquals1(regValueName, regKeyName);
        }


        
private static bool IsDotNet3VersionInstalled(int major, int minor, int build)
        
{
            
bool result = false;

            
const string regValueName = "InstallSuccess";

            
if (!result)
            
{
                
const string regKeyNameFormat = "Software\\Microsoft\\NET Framework Setup\\NDP\\v{0}.{1}\\Setup";
                
string regKeyName = string.Format(regKeyNameFormat, major, minor);

                result 
|= CheckForRegValueEquals1(regKeyName, regValueName);
            }


            
if (!result)
            
{
                
// There seems to be a bug in x64 .NET 3.0 where it only records its success in the 32-bit section of the registry.
                const string regKeyNameFormat2 = "Software\\Wow6432Node\\Microsoft\\NET Framework Setup\\NDP\\v{0}.{1}\\Setup";
                
string regKeyName2 = string.Format(regKeyNameFormat2, major, minor);

                result 
|= CheckForRegValueEquals1(regKeyName2, regValueName);
            }


            
return result;
        }


        
private static bool CheckForRegValueEquals1(string regKeyName, string regValueName)
        
{
            
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(regKeyName, false))
            
{
                
object value = null;

                
if (key != null)
                
{
                    value 
= key.GetValue(regValueName);
                }


                
return (value != null && value is int && (int)value == 1);
            }

        }

版权声明:本文由作者Tony Qu原创, 未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
posted @ 2007-10-07 17:22  找事的狐狸  阅读(3379)  评论(6)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3