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. 基于MFC的OpenGL程序<转>

    原贴地址:https://www.cnblogs.com/pinking/p/6180225.html 首先,使用的库是GLUT以及GLAUX,先下载两者,添加查找路径以及链接   一.单文本文件   ...

  2. spring boot 的常用注解

    SpringBoot用于简化Spring应用的搭建,开发及部署:该框架采用注解的方式进行配置可以很方便的构建Spring应用. 1. @SpringBootApplication @SpringBoo ...

  3. 使用hibernate与mysql时数据不能插入的原因及解决办法

    1.背景 之前从没用过hibernate,因此在网上搜了一下hibernate快速入门方面的信息,最后我按照<Myeclipse Hibernate 快速入门 中文版>(CSDN,百度文库 ...

  4. ReactiveX 学习笔记(7)聚合操作符

    Mathematical and Aggregate Operators 本文的主题为处理 Observable 的聚合操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操 ...

  5. IIS Express

    当前程序员只能通过下面两种web服务器之一来开发和测试ASP.NET网站程序: 1. Visual Studio自带的ASP.NET开发服务器(webdev.exe). 2. Windows自带的II ...

  6. gitbash上使用tree

    gitbash上使用tree vscode从cmd设置gitbash之后,想在使用windows下的tree命令发现运行不了,有两种解决方案. 1,在gitbash上cmd //c tree,就等同c ...

  7. Windows下查看端口常用命令以及关闭端口的方法

    1.C:\Users\JavaKam> netstat -ano|findstr 1099 TCP LISTENING TCP [::]: [::]: LISTENING 2.出现: C:\Us ...

  8. AnimCheckBox按钮点击动画效果《IT蓝豹》

    AnimCheckBox按钮点击动画效果 AnimCheckBox按钮点击动画效果,点击选中后勾选框选择效果,很不错的动画功能.项目来源:https://github.com/lguipeng/Ani ...

  9. 吴裕雄 32-MySQL 导入数据

    1.mysql 命令导入使用 mysql 命令导入语法格式为:mysql -u用户名 -p密码 < 要导入的数据库数据(runoob.sql)实例:# mysql -uroot -p123456 ...

  10. 学JS的心路历程Day28 - PixiJS -基础(二)

    材质暂存(texture cache) 昨天有说到,图片要放入stage前,需要先把图片转成Sprite的特殊图片物件. 但是我们也可以先将图片放进材质暂存(texture cache). 什么是「材 ...