小鱼塘--自说自话的地方

  • 小玩意
  • 小想法
记录自己技术和想法地方
  1. 首页
  2. nodejs
  3. 正文

node js regedit createkey 出现的 unsupported hive bug

6 12 月, 2022 1718点热度 0人点赞 0条评论
内容目录

问题

今天发现node js创建key时候会出现 unsupported hive 错误,这样子就导致程序异常!!!
我发现这个必然会出现这个错误。

解决过程

  1. 重现
  2. 发现版本 5.1.1 一定出现
  3. 跟踪JS到swf文件
  4. 分析swf代码,发现返回错误地方
  5. 加msgbox 提示会发现循环时候有一处undefined 判断不准,没有过滤掉,导致进入代码逻辑,这个时候应该循环完成

测试代码

async function test(){
    await regedit.createKey(['HKCU\\SOFTWARE\\MyApp'])
}
test();

官方代码写法,所以不可能有什么问题。
修改regCreateKey.swf 代码测试

Do While Not stdin.AtEndOfLine
            strLine = stdin.ReadLine()
            msgbox(strLine)         
            strLine = unescape(trim(strLine))

            If IsNull(strLine) or strLine = "" Then
                WScript.Quit 25127
            End If

            ParseHiveAndSubKey strLine, constHive, strSubKey

            if IsNull(constHive) Then
                WriteLineErr "unsupported hive " & strLine
                WScript.Quit 25122
            End If

            Result = CreateKey(constHive, strSubKey)

            If Not Result = 0 Then              
                WScript.Quit Result
            End If
        Loop

我在代码第三行增加msgbox,其实我在别的地方也增加了,开始以为 ParseHiveAndSubKey 代码有问题,后面发现其实没有问题的。

解决方案

一、不修改regedit的代码

async function test(){
    //await regedit.createKey(['HKCU\\SOFTWARE\\MyApp'])
    await regedit.createKey(['','HKCU\\SOFTWARE\\MyApp'])
}

数组第一个增加空的字符串,这样子就没有undefined出现。

第二、修改swf文件

过滤掉为undefine的情况

putvalue 也有这个问题

我真的服了,这个库没有进行测试吗?直接提交了。。。
找到node_modules\regedit\vbs\regPutValue.wsf
增加undefined 检测,如果检测到,就直接退出。这样子能简单跑起来,这个库可能后面会进行更新,应该会修复这个问题,一个注册表还不如用c++写一个exe给nodejs 调用。反正这里也是调用vbs。。。

        Do While Not stdin.AtEndOfLine
            strLine = stdin.ReadLine()
            strLine = unescape(trim(strLine))

            If strLine = "undefined" Then
                WScript.Quit 0
            End if

如果electron 简单补丁同理,自己修改外部vbs文件夹里面的对应文件即可。

错误逻辑

我没有仔细分析原因,大概分析一下而已,启动进程参数进行解析有问题,但不知道这种低级错误怎么会出现,随便跑一个测试就会出现。

标签: node regedit unsupported hive
最后更新:6 12 月, 2022

小鱼儿

爱研究技术,爱玩LOL

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 小鱼塘. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

湘ICP备18005349号