Board logo

标题: [分享]发现reg import的一处bug [打印本页]

作者: qzwqzw     时间: 2008-6-25 17:59    标题: [分享]发现reg import的一处bug

日前测试一个简单的.reg文件的导入
结果发现reg import开关的一个bug

当.reg文件中含有中文注释时
reg import会导入不完整
而且无任何错误提示

随着中文注释的增多
导入所缺失的表项就越多

下面是一个测试范例
REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoStartMenuSubFolders"=dword:00000001
;从「开始」菜单删除用户文件夹

"NoWindowsUpdate"=dword:00000001
;删除到“Windows Update”的访问和链接

"NoSMMyDocs"=dword:00000001
;从「开始」菜单中删除“我的文档”图标

"NoRecentDocsMenu"=dword:00000001
;从「开始」菜单上删除“文档”菜单

"NoNetworkConnections"=dword:00000001
;从「开始」菜单删除“网络连接

"NoFavoritesMenu"=dword:00000001
;从「开始」菜单中删除“收藏夹”菜单

"NoFind"=dword:00000001
;从「开始」菜单中删除“搜索”菜单

"NoSMHelp"=dword:00000001
;从「开始」菜单删除“帮助”命令

"NoRun"=dword:00000001
;从「开始」菜单中删除“运行”菜单

"NoSMMyPictures"=dword:00000001
;从「开始」菜单中删除“图片收藏”图标

"NoStartMenuMyMusic"=dword:00000001
;从「开始」菜单中删除“我的音乐”图标

"NoStartMenuNetworkPlaces"=dword:00000001
;从「开始」菜单中删除“网上邻居”图标

"NoNetHood"=dword:00000001
;隐藏桌面上“网上邻居”图标

"NoPropertiesMyDocuments"=dword:00000001
;从“我的文档”上下文菜单中删除“属性”

"NoPropertiesMyComputer"=dword:00000001
;从“我的电脑”上下文菜单中删除“属性”

"DisablePersonalDirChange"=dword:00000001
;禁止用户更改“我的文档”路径

"NoShellSearchButton"=dword:00000001
;从 Windows 资源管理器上删除搜索按钮

"NoViewOnDrive"=dword:03FFFFFF
;隐藏“我的电脑”中的这些指定的驱动器

"NoDrives"=dword:03FFFFFF
;防止从“我的电脑”访问驱动器

"NoSharedDocuments"=dword:00000001
;从“我的电脑”删除共享文档

"DisallowRun"=dword:00000001
;不要运行指定的 Windows 应用程序

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun]
"1"="setup.exe"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Network]
"NoEntireNetwork"=dword:00000001
;“网上邻居”中不含“整个网络”

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\NonEnum]
"{645FF040-5081-101B-9F08-00AA002F954E}"=dword:00000001
;从桌面删除“回收站”图标

"{20D04FE0-3AEA-1069-A2D8-08002B30309D}"=dword:00000001
;删除桌面上的“我的电脑”图标

"{450D8FBA-AD25-11D0-98A8-0800361B1103}"=dword:00000001
;删除桌面上的“我的文档”图标

作者: wxcute     时间: 2008-6-25 19:03
可以改用
regedit/s *.reg
作者: lxmxn     时间: 2008-6-25 19:10
直接复制的这段脚本,reg import regfilename 之后没有发现有注册表项的丢失啊。

OS : Windows Server 2003 Enterprise Edition sp2
作者: qzwqzw     时间: 2008-6-25 20:59
忘了提测试环境:WinXP SP2
03的reg.exe与XP明显有别

改用regedit /s也是后来的折中办法
当然也可以将注释改成英文的或者拼音

另外记起XP的reg query也有个关于中文的bug来着
谁还记着?
作者: knoppix7     时间: 2008-6-25 21:21
记得是会和谐掉最后几个字符..
作者: qzwqzw     时间: 2008-6-25 21:35
记起来了
似乎是当键值中出现了中文或其它双字节字符时
query的结果会被截断
丢失的字节数约等于出现的双字节字符数

当然
03里已经没有这个问题了
作者: HAT     时间: 2008-6-25 22:04
据说WinXP SP3的reg没有这个bug
作者: wxcute     时间: 2008-6-25 23:36
那将SP3中的reg复制过来能用吗?
作者: HAT     时间: 2008-6-26 10:03


  Quote:
Originally posted by qzwqzw at 2008-6-25 09:35 PM:
记起来了
似乎是当键值中出现了中文或其它双字节字符时
query的结果会被截断
丢失的字节数约等于出现的双字节字符数

当然
03里已经没有这个问题了

我的测试结果没有发现问题

WinXP SP2 英文版

  Quote:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Test>reg query HKEY_LOCAL_MACHINE\SOFTWARE /v 哈哈

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE
    哈哈        REG_SZ  我们 测试

WinXP SP3 中文版

  Quote:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\test>reg query HKEY_LOCAL_MACHINE\SOFTWARE /v 哈哈

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE
    哈哈        REG_SZ  我们 测试

我的测试用例有问题吗?
作者: qzwqzw     时间: 2008-6-26 14:00
为什么偏偏漏掉了最常用的XP SP2 中文版?
作者: HAT     时间: 2008-6-26 14:07
我没有WinXP SP2 中文版环境
公司的电脑全是英文版的
WinXP SP3 中文版还是我在虚拟机上装的
有时间再装个WinXP SP2 中文版试试
呵呵