解决Unbox脚本适配VirtualDJ新路径时的path参数类型错误
你碰到的Uncaught Exception: TypeError [ERR_INVALID_ARG_TYPE]报错,核心原因是第520行里的this.windowsHome变量是undefined,导致path.join接收到无效参数,没法完成路径拼接。结合你修改注册表和脚本的操作,按以下步骤修复:
检查注册表读取逻辑
确认index.js中读取注册表\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders下VDJ键的代码是否正常工作:- 如果你用的是
winreg这类库,要确保查询的键名是VDJ,且没有拼写错误; - 64位系统下,需要指定注册表视图为64位(比如
new Registry({ hive: Registry.HKCU, key: '...', arch: 'x64' })),否则可能读不到你添加的键值; - 调试时可以临时加一行
console.log(this.vdjPath)(假设你把读取到的VDJ路径存在这个变量里),确认是否拿到了正确的字符串路径。
- 如果你用的是
替换硬编码的路径拼接代码
既然已经通过注册表配置了VirtualDJ的根路径,直接用这个路径拼接历史文件,不要再依赖this.windowsHome:
把第520行的代码:path.join(this.windowsHome, 'VirtualDJ\History\tracklist.txt')修改为:
// 假设你从注册表读取到的VDJ路径存在this.vdjPath变量中 path.join(this.vdjPath, 'History/tracklist.txt')注意把反斜杠改成正斜杠,或者用双反斜杠转义(
'VirtualDJ\\History\\tracklist.txt'),避免转义错误。增加参数校验
在使用VDJ路径前加个判断,防止读取失败导致的undefined:if (!this.vdjPath || typeof this.vdjPath !== 'string') { console.error('无法读取VirtualDJ路径,请检查注册表配置'); return; } const tracklistPath = path.join(this.vdjPath, 'History/tracklist.txt');验证注册表配置
打开注册表编辑器(运行regedit),定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders,确认VDJ键的数值数据是VirtualDJ的根目录绝对路径(比如C:\Users\你的用户名\AppData\Local\VirtualDJ),且没有多余的引号或空格。
内容的提问来源于stack exchange,提问作者rebellion1969

