原文  asp.net中通过注册表来检测是否安装Office(迅雷/QQ是否已安装)

检测Office是否安装以及获取安装 路径 及安装版本

 代码如下 复制代码

#region 检测Office是否安装
     ///<summary>
     /// 检测是否安装office
     ///</summary>
     ///<param name="office_Version"> 获得并返回安装的office版本</param>
     ///<returns></returns>
     public static bool IsInstallOffice(out string office_Version, out string office_Path)
     {
         bool result = false;
         string str_OfficePath = string.Empty;
         string str_OfficeVersion = string.Empty;
         office_Version = string.Empty;
         office_Path = string.Empty;
 
         GetOfficePath(out str_OfficePath, out str_OfficeVersion);
         if (!string.IsNullOrEmpty(str_OfficePath) && !string.IsNullOrEmpty(str_OfficeVersion))
         {
             result = true;
             office_Version = str_OfficeVersion;
             office_Path = str_OfficePath;
         }
         return result;
     }
 
     ///<summary>
     /// 获取并返回当前安装的office版本和安装路径
     ///</summary>
     ///<param name="str_OfficePath">office的安装路径</param>
     ///<param name="str_OfficeVersion">office的安装版本</param>
     private static void GetOfficePath(out string str_OfficePath, out string str_OfficeVersion)
     {
         string str_PatheResult = string.Empty;
         string str_VersionResult = string.Empty;
         string str_KeyName = "Path";
         object objResult = null;
         Microsoft.Win32.RegistryValueKind regValueKind;//指定在注册表中存储值时所用的数据类型,或标识注册表中某个值的数据类型。
         Microsoft.Win32.RegistryKey regKey = null;//表示 Windows 注册表中的项级节点(注册表对象?)
         Microsoft.Win32.RegistryKey regSubKey = null;
         try
         {
             regKey = Microsoft.Win32.Registry.LocalMachine;//读取HKEY_LOCAL_MACHINE项
             if (regSubKey == null)
             {//office97
                 regSubKey = regKey.OpenSubKey(@"SOFTWAREMicrosoftOffice8.0CommonInstallRoot", false);//如果bool值为true则对打开的项进行读写操作,否则为只读打开
                 str_VersionResult = "Office97";
                 str_KeyName = "OfficeBin";
             }
             if (regSubKey == null)
             {//Office2000
                 regSubKey = regKey.OpenSubKey(@"SOFTWAREMicrosoftOffice9.0CommonInstallRoot", false);
                 str_VersionResult = "Pffice2000";
                 str_KeyName = "Path";
             }
             if (regSubKey == null)
             {//officeXp
                 regSubKey = regKey.OpenSubKey(@"SOFTWAREMicrosoftOffice10.0CommonInstallRoot", false);
                 str_VersionResult = "OfficeXP";
                 str_KeyName = "Path";
             }
 
             if (regSubKey == null)
             {//Office2003
                 regSubKey = regKey.OpenSubKey(@"SOFTWAREMicrosoftOffice11.0CommonInstallRoot", false);
                 str_VersionResult = "Office2003";
                 str_KeyName = "Path";
                 try
                 {
                     objResult = regSubKey.GetValue(str_KeyName);
                     regValueKind = regSubKey.GetValueKind(str_KeyName);
                 }
                 catch (Exception ex)
                 {
                     regSubKey = null;
                 }
             }
 
             if (regSubKey == null)
             {//office2007
                 regSubKey = regKey.OpenSubKey(@"SOFTWAREMicrosoftOffice12.0CommonInstallRoot", false);
                 str_VersionResult = "Office2007";
                 str_KeyName = "Path";
             }
             objResult = regSubKey.GetValue(str_KeyName);
             regValueKind = regSubKey.GetValueKind(str_KeyName);
             if (regValueKind == Microsoft.Win32.RegistryValueKind.String)
             {
                 str_PatheResult = objResult.ToString();
             }
         }
         catch (Exception ex)
         {
             LogHelper.WriteLogError(ex.ToString());
             //throw ex;
         }
         finally
         {
             if (regKey != null)
             {
                 regKey.Close();
                 regKey = null;
             }
 
             if (regSubKey != null)
             {
                 regSubKey.Close();
                 regSubKey = null;
             }
         }
         str_OfficePath = str_PatheResult;
         str_OfficeVersion = str_VersionResult;
     }
     #endregion

同理,检测QQ、Fetion、360杀毒、IE浏览器,Chrome、Office 2003/2007/2010

只需修改验证

1 regSubKey = regKey.OpenSubKey(@"SOFTWARETencentPlatForm_Type_List3", false);//如果bool值为true则对打开的项进行读写操作,否则为只读打开
即可

检测QQ是否已安装,通过注册表

 代码如下 复制代码

#region 检测QQ是否安装
     public static bool isInstallQQ(out string QQVersion, out string QQPath)
     {
         bool result = false;
         string str_QQPath = string.Empty;
         string str_QQVersion = string.Empty;
         QQVersion = string.Empty;
         QQPath = string.Empty;
 
         GetQQPath(out str_QQPath, out str_QQVersion);
         if (!string.IsNullOrEmpty(str_QQPath) && !string.IsNullOrEmpty(str_QQVersion))
         {
             result = true;
             QQVersion = str_QQVersion;
             QQPath = str_QQPath;
         }
         return result;
     }
 
     /// <summary>
     /// 
     /// </summary>
     /// <param name="str_QQPath"></param>
     /// <param name="str_QQVersion"></param>
     private static void GetQQPath(out string str_QQPath, out string str_QQVersion)
     {
         string str_PatheResult = string.Empty;
         string str_VersionResult = string.Empty;
         string str_KeyName = "TypePath";
         object objResult = null;
         Microsoft.Win32.RegistryValueKind regValueKind;//指定在注册表中存储值时所用的数据类型,或标识注册表中某个值的数据类型。
         Microsoft.Win32.RegistryKey regKey = null;//表示 Windows 注册表中的项级节点(注册表对象?)
         Microsoft.Win32.RegistryKey regSubKey = null;
         try
         {
             regKey = Microsoft.Win32.Registry.LocalMachine;//读取HKEY_LOCAL_MACHINE项
             if (regSubKey == null)
             {//QQ
                 regSubKey = regKey.OpenSubKey(@"SOFTWARETencentPlatForm_Type_List3", false);//如果bool值为true则对打开的项进行读写操作,否则为只读打开
                 str_VersionResult = "QQ";
                 str_KeyName = "TypePath";
             }
             objResult = regSubKey.GetValue(str_KeyName);
             regValueKind = regSubKey.GetValueKind(str_KeyName);
             if (regValueKind == Microsoft.Win32.RegistryValueKind.String)
             {
                 str_PatheResult = objResult.ToString();
             }
         }
         catch (Exception ex)
         {
             LogHelper.WriteLogError(ex.ToString());
             //throw ex;
         }
         finally
         {
             if (regKey != null)
             {
                 regKey.Close();
                 regKey = null;
             }
 
             if (regSubKey != null)
             {
                 regSubKey.Close();
                 regSubKey = null;
             }
         }
         str_QQPath = str_PatheResult;
         str_QQVersion = str_VersionResult;
     }
     #endregion

检测迅雷

 代码如下 复制代码
  #region 检测 Thunder 迅雷
     public static bool isInstallThunder(out string thunderVersion, out string thunderPath)
     {
         bool result = false;
         string str_ThunderPath = string.Empty;
         string str_ThunderVersion = string.Empty;
         thunderVersion = string.Empty;
         thunderPath = string.Empty;
 
         GetThunderPath(out str_ThunderPath, out str_ThunderVersion);
         if (!string.IsNullOrEmpty(str_ThunderPath) && !string.IsNullOrEmpty(str_ThunderVersion))
         {
             result = true;
             thunderVersion = str_ThunderVersion;
             thunderPath = str_ThunderPath;
         }
         return result;
     }
 
     /// <summary>
     /// 
     /// </summary>
     /// <param name="str_QQPath"></param>
     /// <param name="str_QQVersion"></param>
     private static void GetThunderPath(out string str_thunderPath, out string str_thunderVersion)
     {
         string str_PatheResult = string.Empty;
         string str_VersionResult = string.Empty;
         string str_KeyName = "Path";
         object objResult = null;
         Microsoft.Win32.RegistryValueKind regValueKind;//指定在注册表中存储值时所用的数据类型,或标识注册表中某个值的数据类型。
         Microsoft.Win32.RegistryKey regKey = null;//表示 Windows 注册表中的项级节点(注册表对象?)
         Microsoft.Win32.RegistryKey regSubKey = null;
         try
         {
             regKey = Microsoft.Win32.Registry.LocalMachine;//读取HKEY_LOCAL_MACHINE项
             if (regSubKey == null)
             {//QQ
                 regSubKey = regKey.OpenSubKey(@"SOFTWAREThunder NetworkThunderOemthunder_backwnd", false);//如果bool值为true则对打开的项进行读写操作,否则为只读打开
                 str_VersionResult = "Thunder";
                 str_KeyName = "Path";
             }
             objResult = regSubKey.GetValue(str_KeyName);
             regValueKind = regSubKey.GetValueKind(str_KeyName);
             if (regValueKind == Microsoft.Win32.RegistryValueKind.ExpandString)
             {
                 str_PatheResult = objResult.ToString();
             }
         }
         catch (Exception ex)
         {
             LogHelper.WriteLogError(ex.ToString());
         }
         finally
         {
             if (regKey != null)
             {
                 regKey.Close();
                 regKey = null;
             }
             if (regSubKey != null)
             {
                 regSubKey.Close();
                 regSubKey = null;
             }
         }
         str_thunderPath = str_PatheResult;
         str_thunderVersion = str_VersionResult;
     }
     #endregion

asp.net中通过注册表来检测是否安装Office(迅雷/QQ是否已安装)的更多相关文章

  1. 使用.NET 4.0+ 操作64位系统中的注册表

    一.64位系统中的注册表 以 LocalMachine 中的启动项为例: 64位应用的注册表位置还是在: SOFTWARE\Microsoft\Windows\CurrentVersion\Run 而 ...

  2. C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation

    C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation 后台添加以下方法:/// <summa ...

  3. Unity中对注册表进行修改

    问题背景: PC端软件开发,当我在Unity中的PlayerSetting中设置好分辨率,每次打包运行后会记忆上次退出时窗口的分辨率(记忆窗口状态),导致下次打开时不是PlayerSetting中的初 ...

  4. 用 C# 在 Windows 7 中写注册表想到的

    摘自:http://blog.163.com/dpj_001/blog/static/2742941520110251500753/ 某日做一个项目,需要在注册表中加入键,同时写值,操作系统环境为 W ...

  5. Ruby Rails学习中:注册表单,注册失败,注册成功

    接上篇 一. 注册表单 用户资料页面已经可以访问了, 但内容还不完整.下面我们要为网站创建一个注册表单. 1.使用 form_for 注册页面的核心是一个表单, 用于提交注册相关的信息(名字.电子邮件 ...

  6. 在Unity中对注册表的信息进行操作

      问题1 在对注册表进行操作时无法生成注册表相关的类  解决办法:     增加头文件using Microsft.Win32; 问题2                    在运行程序时报错同时注 ...

  7. 使用MSBUILD 构建时出错 error MSB3086: 任务未能使用 SdkToolsPath“”或注册表项“XXX”找到“LC.exe”,请确保已设置 SdkToolsPath。

    如果项目有添加有WB引用,比如引用其它网站的WEB服务等,那么VS在编译时会自动生成个 [项目名称].Serializers.dll的文件,就是把引用服务中的相关对象信息生成硬编码的程序集,以提高效率 ...

  8. ASP.NET中后台注册js脚本攻略(转)

    用Page.ClientScript.RegisterClientScriptBlock 和Page.ClientScript.RegisterStartupScript:区别:   1.使用Page ...

  9. asp.net中通过form表单submit提交到后台的实例

    前台<body>中的代码: <body> <div id="top"> </div> <form id="login ...

随机推荐

  1. vhost文件设置

    #例子<VirtualHost *.82> #设置端口号为82 ServerName localhost #服务器名称 DocumentRoot "d:/Web" #文 ...

  2. ZOJ 2794 Just Pour the Water 【矩阵快速幂】

    给你n个杯子,每次有特定的到水规则,倒m次请问最后每个被子里还有多少水 我们很容易发现每次变化的规则相同,那么可以set 一个矩阵存放 然后多次倒水就相当于矩阵相乘,在m 范围达到(1<= M  ...

  3. Chapter 11 迪米特法则

    迪米特法则也叫最少知识原则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用. 迪米特法则首先强调的前提是 ...

  4. 部署ASP.NET MVC项目

    目标:了解部署过程,掌握部署中出现问题该如何处理. 部署网站往往是一件麻烦事,因为在安装部署的过程中,经常有许多步骤要运行,对于许多不太熟悉IIS/SQL的新手来说,部署网站编程一件非常困难且危险的事 ...

  5. Derby的下载安装和使用,(和JAVA中使用Derby)

    首先是Java环境变量要配置: 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Fil ...

  6. jsp_javabean

    什么是javabean? 遵循一定的设计原则的任何java类都可以是javabean组件 1.可序列化 implements serializable 2.无参数的构造方法 3.私有属性 通过公有方法 ...

  7. 六、Nginx 防盗链

    盗链是指一个网站的资源(图片或附件)未经允许在其它网站提供浏览和下载.尤其热门资源的盗链,对网站带宽的消耗非常大,本文通过nginx的配置指令location来实现简单的图片和其它类型文件的防盗链. ...

  8. ZOJ 3594 年份水题 【注意:没有0年】

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #i ...

  9. 解决QT Creator在Linux下的输入法问题

    https://vjudge1.github.io/2014/04/02/type-chinese-in-linux/http://blog.csdn.net/ubuntutouch/article/ ...

  10. Jquery学习笔记:利用parent和parents方法获取父节点

    通过选择器一般只能获取指定标识的节点,或者获取子节点. 有些场景下,往往需要根据当前节点找到满足条件的父节点.这个可以通过相应的方法来实现. 1.parent方法 该方法可以获取元素的直接父节点. 我 ...