c#: 判断Firefox是否安装
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是否安装的更多相关文章
- [转]在linux下如何判断是否已经安装某个软件?软件安装在哪个目录
<1>在linux下如何判断是否已经安装某个软件? ++++++++++++++++++++++++++++++++++++++++++ rpm -qa|grep 软件包 ++++++++ ...
- HTML中判断手机是否安装某APP,跳转或下载该应用
有些时候在做前端输出的时候,需要和app的做些对接工作.就是在手机浏览器中下载某app时,能判断该用户是否安装了该应用.如果安装了该应用,就直接打开该应用:如果没有安装该应用,就下载该应用.那么下面就 ...
- hackbar增强版 & 在Firefox上安装未通过验证的扩展
hackbar是Firefox的经典插件之一.介绍如下(懒得翻译了) This toolbar will help you in testing sql injections, XSS holes a ...
- NSIS安装程序制作工具判断系统是否安装.NET
前段时间忙了很久的系统总算上线了,由于是WinForm程序不能整个文件夹的发给客户使用.所以必须要打包,记得以前在VS2005中是自带部署功能的.现在换了VS2013那个部署功能完全弄不清方向.最后在 ...
- kali下firefox的安装
在kali的系统中自带了一个firefox分支下的浏览器Iceweasel(Iceweasel是Mozilla Firefox浏览器的Debian再发布版),但是怎么说也配不上kali的强悍气势.还是 ...
- Firefox离线安装扩展教程
Firefox离线安装扩展教程 解决问题博文:解决stackoverflow打开慢不能注册登录 应网友求助在上传了需要的扩展资源后,顺便写个离线安装方法,其实百度也行,这不写下来后为需求者省事.(*^ ...
- js判断浏览器是否安装或启用了flash的方法总结
目录 # js判断浏览器是否安装或启用了flash的方法 # chrome浏览器启用flash插件的方法 # 参考 # js判断浏览器是否安装或启用了flash的方法 在传统浏览器,可以使用windo ...
- JS 判断浏览器是否安装Flash 兼容IE、firefox
/** * @Author: HTL * @Email: Huangyuan413026@163.com * @DateTime: 2016-06-02 11:37:05 * @Description ...
- firefox无法安装未通过验证的扩展
firefox43版本无法安装未验证附加组件,利用以下方法: 1.进入firefox about:config页面中 2.搜索xpinstall.signatures.required,将值改为fa ...
随机推荐
- 人脸识别68个点<转>
[Opencv] 于仕琪 人脸68个特征点分布情况 // 鼻尖 30 // 鼻根 27 // 下巴 8 // 左眼外角 36 // 左眼内角 39 // 右眼外角 45 // 右眼内角 42 // 嘴 ...
- wed开发基础--练习题
一.HTML部分 本小节重点: 熟练使用div+span布局,知道div和span的语义化的意思 熟悉对div.ul.li.span.a.img.table.form.input标签有深刻的认知, 初 ...
- li之间的间隙问题
1.间隙是有代码格式中的换行符产生,对代码进行压缩处理或手动删除换行就好:
- U3D 贴图通道分离后为什么能减小体积
原理上,分离与否,不会减小图片原始体积,还可能增大了. RGBA32 分离后 = RGB24 + A8,这种情况下大小没变 但压缩后就不一样了,因为RGBA32整张图的压缩过程中,每个像素是否可以压缩 ...
- Rafy源码解读 笔记(一) DbMigration
主要功能,提供数据库的升级回滚和变迁操作. 整个模块的都是通过DbMigrationContext这个类来体现的,回滚或升级由若干个子操作完成,每个子操作被封装成一个类MigrationOperati ...
- Haskell语言学习笔记(86)字符串格式化与插值
String 的格式化 Text.Printf 这个模块用来处理字符串格式化. printf :: PrintfType r => String -> r printf 用于格式化字符串, ...
- 火狐的3d视图插件Tilt 3D
15年的时候,使用过此功能.后来没注意就发现没了.firefox在47之后就停止自带了. 换成插件了. https://addons.mozilla.org/en-US/firefox/addon/t ...
- Chatbot中的填槽(Slot Filling)(转)
以下内容是学习了@我偏笑发布在公众号hanniman文章后,加上自己观点重新输出配图的文章 原文链接:http://t.cn/RE0FkgD 跳槽,吐槽,匹诺曹都听过,这个填槽,emmmm,黑人问号脸 ...
- Sequence 加速
翻译说明: 原标题: Kotlin : Slow List and Lazy Sequence 原文地址: https://medium.com/@elye.project/kotlin-slow-l ...
- ubuntu18换国内源
编辑/etc/apt/sources.list文件, 在文件最前面添加以下条目(操作前请做好相应备份): ##中科大源 deb https://mirrors.ustc.edu.cn/ubuntu/ ...