1、源起:

KV项目需要给浏览器安装下载插件,就需要判断是否安装对应浏览器,发现判断卸载目录方法,32位程序在.net 2.0运行环境下,常规方法不能访问64位注册表位置,导致不能判断。

2、卸载键值

@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"

@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"

所有安装过的程序,其若支持卸载,键值都在此处。

32位系统,以@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"做为key值访问,其也只能定位到@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"这里,不能直接访问64位值位。

因此,以下代码判断,对于64位系统,判断不到。也就是说,下面代码,直判断到Wow6432节点!

        private static string FirefoxInstallLoation()
{
const string unInsPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\";
const string unInsPath64 = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"; string firefoxLocation = string.Empty;
try
{
//这里,32位程序,实际定位到的,是Wow6432下节点
var unInsKey = Registry.LocalMachine.OpenSubKey(unInsPath);
if (unInsKey == null)
return string.Empty; string[] unInsKeyNames = unInsKey.GetSubKeyNames();
foreach (var name in unInsKeyNames)
{
if (name.Contains("Mozilla Firefox"))
{
firefoxLocation = unInsKey.OpenSubKey(name).GetValue("InstallLocation", string.Empty).ToString();
if (Directory.Exists(firefoxLocation))
return firefoxLocation;
}
}

//它仍是定位到Wow6432下
unInsKey = Registry.LocalMachine.OpenSubKey(unInsPath64);
if (unInsKey == null)
return string.Empty; unInsKeyNames = unInsKey.GetSubKeyNames();
foreach (var name in unInsKeyNames)
{
if (name.Contains("Mozilla Firefox"))
{
firefoxLocation = unInsKey.OpenSubKey(name).GetValue("InstallLocation", string.Empty).ToString();
if (Directory.Exists(firefoxLocation))
return firefoxLocation;
}
}
}
catch
{
}
return firefoxLocation;
}

其始终定位到的,是此处:

3、灵光乍现,App Paths

于是寻找其它方法,还操注册表的心,真给搜出来个东西:

@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe"

此键值,在64、32位下都存在,其程序路径、安装路径都有了,看来找对了地方,写代码如下:

        //检测Chrome卸载程序判断其是否安装
private static bool CheckFirefoxInstalled()
{
return File.Exists(FirefoxInstallLoation());
} private static string FirefoxInstallLoation()
{
const string firefoxAppPath = @"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe";
try
{
var firefoxKey = Registry.LocalMachine.OpenSubKey(firefoxAppPath);
if (firefoxKey == null)
return string.Empty;
return firefoxKey.GetValue(string.Empty).ToString();
}
catch
{
}
return string.Empty;
}

验证判断正常,问题解决!

4、参数设置判断效果

c#: 判断Firefox是否安装的更多相关文章

  1. [转]在linux下如何判断是否已经安装某个软件?软件安装在哪个目录

    <1>在linux下如何判断是否已经安装某个软件? ++++++++++++++++++++++++++++++++++++++++++ rpm -qa|grep 软件包 ++++++++ ...

  2. HTML中判断手机是否安装某APP,跳转或下载该应用

    有些时候在做前端输出的时候,需要和app的做些对接工作.就是在手机浏览器中下载某app时,能判断该用户是否安装了该应用.如果安装了该应用,就直接打开该应用:如果没有安装该应用,就下载该应用.那么下面就 ...

  3. hackbar增强版 & 在Firefox上安装未通过验证的扩展

    hackbar是Firefox的经典插件之一.介绍如下(懒得翻译了) This toolbar will help you in testing sql injections, XSS holes a ...

  4. NSIS安装程序制作工具判断系统是否安装.NET

    前段时间忙了很久的系统总算上线了,由于是WinForm程序不能整个文件夹的发给客户使用.所以必须要打包,记得以前在VS2005中是自带部署功能的.现在换了VS2013那个部署功能完全弄不清方向.最后在 ...

  5. kali下firefox的安装

    在kali的系统中自带了一个firefox分支下的浏览器Iceweasel(Iceweasel是Mozilla Firefox浏览器的Debian再发布版),但是怎么说也配不上kali的强悍气势.还是 ...

  6. Firefox离线安装扩展教程

    Firefox离线安装扩展教程 解决问题博文:解决stackoverflow打开慢不能注册登录 应网友求助在上传了需要的扩展资源后,顺便写个离线安装方法,其实百度也行,这不写下来后为需求者省事.(*^ ...

  7. js判断浏览器是否安装或启用了flash的方法总结

    目录 # js判断浏览器是否安装或启用了flash的方法 # chrome浏览器启用flash插件的方法 # 参考 # js判断浏览器是否安装或启用了flash的方法 在传统浏览器,可以使用windo ...

  8. JS 判断浏览器是否安装Flash 兼容IE、firefox

    /** * @Author: HTL * @Email: Huangyuan413026@163.com * @DateTime: 2016-06-02 11:37:05 * @Description ...

  9. firefox无法安装未通过验证的扩展

    firefox43版本无法安装未验证附加组件,利用以下方法: 1.进入firefox  about:config页面中 2.搜索xpinstall.signatures.required,将值改为fa ...

随机推荐

  1. ---github git clone 加速

    https://www.zhihu.com/question/27159393/answer/35528173 git config --global http.postBuffer 52428800 ...

  2. Python运算符,基本数据类型

    1,基本的运算符: 加,减,乘,除 取余(%)   取商(//)   **(幂) in    not in (判断是否在里面) 1.运算符        结果是值            算数运算   ...

  3. 初级java程序员-各公司技能要求

    熟悉tomcat部署和性能调试,开发常用linux 命令,有性能调优(tomcat,sql等)经验优先: 熟练使用SSH.springmvc.mybatis.Hibernate.jquery等框架,了 ...

  4. centos6.9出现openvpn:error=certificate signature failure的处理

    原因: 将原来openwrt上用的证书复制到centos 6.9后,客户端都连不上了,查了服务器log,出现是error=certificate signature failure错误. 处理方法见帖 ...

  5. [C语言]数据类型与计算

    ------------------------------------------------------------------------------------------------- 实际 ...

  6. HttpURLConnection类的使用

    此类以获取天气的一个api地址为例: package javaexcjs; import java.io.BufferedReader; import java.io.OutputStreamWrit ...

  7. socket编程的同步、异步与阻塞、非阻塞示例详解

     socket编程的同步.异步与阻塞.非阻塞示例详解之一  分类: 架构设计与优化 简介图 1. 基本 Linux I/O 模型的简单矩阵 每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序 ...

  8. 安装PostGIS 2.1.1 时遇到checking for library containing GDALAllRegister... no

    在postgis中执行./configure时,遇到 checking for library containing GDALAllRegister... no 的错误信息 [root@test po ...

  9. eclipse老运行上一个程序之原因总结

    运行eclipse有的时候不运行刚写的类,老是运行别的以前的类,删除了以前的类就啥都不运行.找了好久的原因,最后发现,刚写的类没有main()或者有误.这和java的特点有关,程序的运行总是main( ...

  10. 1.3.7、CDH 搭建Hadoop在安装之前(端口---第三方组件使用的端口)

    第三方组件使用的端口 在下表中,每个端口的“ 访问要求”列通常是“内部”或“外部”.在此上下文中,“内部”表示端口仅用于组件之间的通信; “外部”表示该端口可用于内部或外部通信. Component ...