如何最可靠地检查Firefox是否已安装?

5

我正在制作一款与Firefox扩展捆绑的软件。在我的安装脚本中,我想询问用户是否要安装该扩展。但是,我需要以下两点:

  1. 判断Firefox是否已经安装
  2. 判断Firefox的版本号

在InnoSetup或C#中,我应该如何实现这两个功能?我尝试手动检查默认Firefox安装目录的路径或检查注册表中的卸载记录,但我认为这些方法都不够可靠。

3个回答

6
推荐的方法是检查是否存在 HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 注册表项。每个安装的版本都会有一个子键。如果您很谨慎,还可以检查值 HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox\<version>\Main\PathToExe - 如果该文件存在,则 Firefox 真正安装了并且您没有查看到过期的注册表项。
请注意,只有在实际使用安装程序时才能检测到 Firefox 的安装情况。您始终可以手动“安装”Firefox,只需使用7zip解压缩设置可执行文件,并将其解压缩到任何目录中。夜间构建也可作为常规 zip 文件提供,更容易解压缩。这将正常工作,但不会添加任何注册表键,这将使您无法找到此安装。

2
我应该补充说明一下,这个路径是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox,适用于64位Windows系统。 - c0ldcrow
是的,如果您从x64应用程序访问注册表(请参见http://support.microsoft.com/kb/896459)。请注意,x64版本的Firefox即将推出,届时您将需要检查两个位置。 - Wladimir Palant
我曾见过一个用户的计算机,在HKLM下没有任何东西,但在HKCU下确实有条目。现在是否可以像Chrome一样仅在用户目录下安装Firefox? - Rory
1
@Rory:只有在使用安装程序的情况下才能检测到Firefox的安装情况(我将在回答中添加注意事项)。任何人都可以使用7zip将可执行文件解压缩到他们想要的任何目录中 - 这将正常工作,不需要管理员权限。此外,还有Firefox便携版,无需安装即可使用。但是,如果你正在使用安装程序,据我所知只支持全局安装。 - Wladimir Palant
2016年的一个注记(当时FF x64已经发布了一段时间):Wow6432Node 检查似乎是多余的。安装路径仍在常规注册表键中。 - thomasb
@thomasb:通常是普通的注册表键。但是,您仍然可以安装32位版本的Firefox,并通过某些64位应用程序检查注册表键。如果这样做,您必须考虑注册表重定向-即在Wow6432Node下查找。 - Wladimir Palant

4

以下是Firefox 27.0.1安装时创建的密钥列表(缩短版)

HKLM\SOFTWARE\Classes\FirefoxHTML\
HKLM\SOFTWARE\Classes\FirefoxURL\
HKLM\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe\
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe\Path
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Mozilla Firefox 27.0.1 (x86 en-US)\
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe\
HKLM\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox\27.0.1 (en-US)\
HKLM\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox 27.0.1\
HKLM\SOFTWARE\Wow6432Node\Clients\StartMenuInternet\FIREFOX.EXE\

我们的一个客户没有“卸载”这个选项,所以我们将使用列表中的另一个选项。 我将使用:“只要存在以下任何一个键,则已安装Firefox:”
HKLM\SOFTWARE\Mozilla\Mozilla Firefox\
HKLM\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE\
HKLM\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox\
HKLM\SOFTWARE\Wow6432Node\Clients\StartMenuInternet\FIREFOX.EXE\

3

我认为 HKLM\SOFTWARE\Clients\StartMenuInternet\FIREFOX.EXE 键不依赖于操作系统位数,因此我建议使用这个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接