代码来自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);
            }
        }

转载于:https://www.cnblogs.com/tonyqus/archive/2007/10/07/916165.html

如何检测是否安装了.NET 2.0和.NET 3.0相关推荐

  1. 为XNA制做安装程序(四)WIX Toolset 3.0 for Visual Studio 2008

    首先到http://wix.sourceforge.net/下载最新的WIX,这是一款开源的安装程序打包工具,其中2.0版本和3.0是可以安装在VS2008下,而3.5安装在VS2010中.我们用VS ...

  2. PaddlePaddle飞桨OCR文本检测——入门安装GPU版(一)

    首先放上github上的开源代码网址,里面的帮助文档说的非常详细: https://github.com/PaddlePaddle/PaddleOCR/ 环境安装 python中环境使用pip安装: ...

  3. Ubuntu18.04安装python3.7.7和tensorflow-gpu 2.2.0

    Ubuntu18.04安装python3.7.7和tensorflow-gpu 2.2.0 前言 安装python3.7.7与环境变量设置 使用pip3安装tensorflow-gpu 2.2.0 测 ...

  4. ubuntu22.04 安装、DataGrip远程连接、卸载 MySQL8.0.33

    安装 1.更新系统 > sudo apt update > sudo apt upgrade 2.使用apt安装MySQL8.0.33 使用该方式安装MySQL时,会自动安装最新版本,并且 ...

  5. NSIS检测已安装并卸载旧版本和静默安装.msu文件

    NSIS检测已安装并卸载旧版本: Function .onInit    !insertmacro TIP_WHEN_AMD64_INSTALLER_RUNAT_X86    ;安装到所有用户下,cu ...

  6. android应用宝检测是否安装,android 检测手机是否安装了应用宝 app跳转应用宝

    //检测是否安装了应用宝 public boolean isMobile_spExist() { PackageManager manager = this.getPackageManager(); ...

  7. 通过注册表检测是否安装了VC++ 2008 SP1 redistributable。

    在发布 vs2008 程序时,往往会发现程序在某些电脑上无法运行.原因是目标电脑上没有相关的VC运行库. 最简单的方法,就是到微软的官网上下载并安装最新的 Visual C++ 2008 SP1 re ...

  8. iOS-82-自己APP地图内检测是否安装了其他地图(百度地图、高德地图、苹果地图),以及跳转

    这功能早就做了,最近又在弄,所以记录下代码,免得岁数大了,健忘! 第一步:配置白名单 只有在info.plist文件里添加相应地图白名单,才可以检测到该应用,如图 第二步:检测是否安装了地图app 放 ...

  9. torch==1.1.0和torchvision-0.3.0安装

    torch==1.1.0和torchvision-0.3.0安装 分开安装,每次都会把torch升级成1.5.0把版本.解决办法,一起安装. pip3 install --timeout=12000 ...

  10. mysql创立不了数据库_以下不属于MySQL安装时自动创建的数据库是( ) (5.0分)_学小易找答案...

    [单选题]下列删除itcast数据库的sql语句中,正确的是 (5.0分) [单选题]MySQL提供的( )语句可查看数据表的创建语句. (5.0分) [单选题]下面选项中,属于定点数的类型是 (5. ...

最新文章

  1. 【字符串】字符串查找 ( 蛮力算法 )
  2. OSG造成屏幕闪烁,且鼠标不能操作的一行代码
  3. Oracle 数据库Patch概念性小常识 PSU,CPU,bundle patch
  4. Java乘法计算错误,Java JRE致命错误:乘法过多
  5. zookeeper配置文件说明
  6. swapfile.sys文件的作用及如何禁用Hibernate.sys和Pagefile.sys
  7. 英伟达、英特尔、AMD显卡设置,减少游戏掉帧卡顿
  8. 加一(python)
  9. 【MATLAB】使用“蒙特卡罗(Monter Carlo)”算法计算不规则图形的面积
  10. Eggjs笔记:详解Mongoose的聚合管道以及populate实现关联查询
  11. 一份超详细的网站推广优化方案 1
  12. 研二小硕的艰难实习路
  13. DELL 1520 笔记本拆机
  14. 实心和空心哪个抗弯能力强_同样材质,同样长度,质量相同的空心管和实心管,实心管抗弯曲能力强 (4.0分)...
  15. zblog php模板标签,Z-BlogPHP主题教程,zblogphp模板模块标签收藏
  16. 来,打一下五笔的字根表
  17. 关于低噪声放大器的测试过程
  18. App软著申请过程全记录
  19. 本题要求编写程序,从给定字符串中查找某指定的字符。
  20. 香港汇丰银行开户的个人条件是什么

热门文章

  1. STM32定时器中断时间计算
  2. 360°剖析:科创板“最”企业有什么不同?
  3. SQL结构化查询语言
  4. CAN记录仪 can数据记录仪简介和功能应用 can总线记录
  5. 【OFDM系列6】MIMO-OFDM系统模型、迫零(ZF)均衡检测和最小均方误差(MMSE)均衡检测原理和公式推导
  6. tcp_tw_reuse 为什么默认是关闭的?
  7. 综合视频指挥调度会议系统
  8. 批处理脚本之批量打开常用软件
  9. 从零开始学习Linux运维,成为IT领域翘楚(十)
  10. 双评价技术指南2020_“双评价”技术指南(11月份版)解读