读取Firefox的注册表项时出错

问题描述 投票:-1回答:4

我有一个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插件(它在菜单 - >插件中处于活动状态,我没有看到“激活”启动“选项”。我确实有一个条目:

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

这指向正确的目的地。为什么有一个“错误读取FireFox的注册表项。”?

firefox registry autoit
4个回答
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类型)以获取应用程序的当前版本。比如说这会返回字符串“27.0”。

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

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

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

如果没有任何作用,你只需修改自己的系统让它工作,我会检查并要求Firefox库的作者更新它。


2
投票

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

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

至:

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

此致,Gonnosuke


1
投票

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

在代码顶部添加#RequireAdmin。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.