我有一个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库中的相关代码:
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库的作者更新它。
我认为缺少反斜杠。在FF.au3 UDF中更改以下内容:
Local $sFFExe = RegRead($sHKLM & "" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")
至:
Local $sFFExe = RegRead($sHKLM & "\" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")
此致,Gonnosuke
大多数注册表操作问题都是缺少权限。
在代码顶部添加#RequireAdmin。
“当在64位Windows上运行时,如果要读取特定于64位环境的值,则必须将HK ...后缀为64,即HKLM64。”