我有一个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;?
答案 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;