读取Firefox的注册表项时出错

时间:2014-07-15 12:01:19

标签: firefox registry autoit

我有一个AutoIt v3脚本(从FF.au3的作者复制):

#Include <FF.au3>

_FFStart("http://ff-au3-example.thorsten-willert.de/")

If _FFIsConnected() Then
    Sleep(2000)
    _FFAction("presentationmode", True)
    Sleep(2000)
    _FFOpenURL("http://www.google.com")
    Sleep(2000)
    _FFAction("back")
    _FFAction("presentationmode", False)
    Sleep(2000)
    _FFOpenURL("chrome:bookmarks")
    Sleep(2000)
    _FFAction("alert", "Bye bye ...")
    _FFQuit()
EndIf

Exit

但是当我运行它时,我收到一条错误消息:

__FFStartProcess ==> General Error: Error reading registry entry for FireFox.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox\*CurrentVersion*\Main\PathToExe
Error from RegRead: 1

我安装了Firefox和AutoIt v3,我将FF.au3 UDF下载到与我的脚本相同的目录中,我安装并激活了MozRepl Firefox插件(它在菜单中有效 - &gt;插件-ins,我没有看到&#34;启动时激活&#34;选项)。我确实有一个条目:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox\26.0 (pl)\Main

指向正确的目的地。为什么有一个&#34;错误读取FireFox的注册表项。&#34;?

4 个答案:

答案 0 :(得分:2)

以下是Firefox库中的相关代码:

Local $sHKLM = 'HKEY_LOCAL_MACHINE\SOFTWARE\'
If @OSArch <> 'X86' Then $sHKLM &= 'Wow6432Node\'
$sHKLM &= 'Mozilla\Mozilla Firefox'
Local $sFFExe = RegRead($sHKLM & "" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")
If @error Then
    SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "Error reading registry entry for FireFox." & @CRLF & _
            $sHKLM & "\*CurrentVersion*\Main\PathToExe" & @CRLF & _
            "Error from RegRead: " & @error))
    Return 0
EndIf

它从路径CurrentVersion读取键HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox(可能是REG_SZ类型)以获取当前版本的应用程序。比如说这会返回字符串&#34; 27.0&#34;。

然后它查找HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox\27.0\Main(基于它刚刚为当前版本找到的字符串)键PathToExe(也可能是REG_SZ)。这是第一次尝试,如果它没有失败,它会将此路径用于可执行文件。

如果失败,它会检查密钥HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox\*CurrentVersion*\Main的路径PathToExe(字面上用星号)。这也失败了,这就是你收到错误的原因。

检查系统的所有上述注册表路径。 Firefox库可能需要针对以后的Firefox版本进行更新。尝试尽可能干净&#34;&#34;安装Firefox,看看是否有效。如果可能的话,还可以尝试通过setup / deinstaller修复安装。

如果没有任何作用,您只需要修改自己的系统以使其工作,我将检查并询问Firefox库的作者更新它。

答案 1 :(得分:2)

我认为缺少反斜杠。在FF.au3 UDF中更改以下内容:

Local $sFFExe = RegRead($sHKLM & "" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")

为:

Local $sFFExe = RegRead($sHKLM & "\" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")

此致 Gonnosuke

答案 2 :(得分:1)

大多数注册表操作问题都是缺乏权限。

在代码顶部添加 #RequireAdmin

答案 3 :(得分:0)

&#34;当在64位Windows上运行时,如果要读取特定于64位环境的值,则必须将HK ...后缀为64,即HKLM64。&#34;