编辑Windows注册表时(如果需要)可以使用哪个注册表编辑器版本来启动reg文件?

乌拉尼巴巴

根据Microsoft知识库文章310516,应使用以下任一方法启动.reg文件以编辑Windows注册表

  • Windows Registry Editor Version 5.00
    适用于Windows 2000,Windows XP和Windows Server 2003
  • REGEDIT4
    适用于Windows 95,Windows 98和Windows NT 4.0。

在Windows 7上启动是否正确,Windows Registry Editor Version 5.00还是应改为一个状态版本6?

实际上,运行.bat文件时是否真的需要它?

对于当前版本,单击菜单项关于注册表编辑中的帮助菜单中的注册表编辑器

莫菲

主要使用两个标准应用程序来从批处理文件中处理Windows注册表:

  • 注册表文件
  • 注册表编辑器

在Windows x64上,它们都以32位和64位应用程序的形式存在,因此32位版本可以像32位应用程序一样访问注册表,这意味着注册表重定向器处于活动状态,而64位应用程序的注册表项对于32位不可见REGREGEDIT

通常,最好使用REG而不是REGEDIT来获取(读取访问权限)或设置(写入访问权限)批处理文件中的一些键或值。

自Windows Vista以来,使用REGEDIT始终需要管理员权限,即使仅用于将注册表项导出到注册表文件(读取访问权限)中,还是从注册表文件中导入数据(写入访问权限)到HKEY_CURRENT_USER(简称:HKCU),都需要使用管理员权限

通过使用REG,对HKCU的许多操作(例如QUERY(读取访问)或ADD(写入访问))都不需要管理员权限。当然,对HKEY_LOCAL_MACHINE(简称:HKLM)的写访问需要管理员特权,以及其他不常用的操作。在命令提示符窗口reg /?运行会显示可用的操作。reg query /?reg add /?在控制台窗口中执行将显示语法和选项,以在Windows注册表中获取(查询)或设置(添加)数据。

如果文件的第一行包含* .reg文件,则在导入时仅将其解释为具有有效注册表数据的文件

  • REGEDIT4
  • Windows注册表编辑器版本5.00

这不是注册表编辑器的版本或Windows版本。它是文件本身中注册表数据格式的版本信息。因此,这是一个注册表文件格式版本。注册表文件的第一行必须具有这两个字符串之一。

尝试导入不带此标题行的* .reg文件将导致错误。

Windows 2000(还具有regedt32.exe)和更高版本的Windows支持4和5两种格式的注册表文件。

Windows 95、98,Millennium和NT4仅支持格式4的注册表文件。

因此,当今(2016年)主要取决于用于注册表文件的格式的数据。

主要区别在于支持的文本数据编码

对于非Unicode识别应用程序,Windows-1252适用于北美和西欧国家/地区,使用Windows语言环境和语言设置中定义代码页,格式为REGEDIT4的注册表文件只能是每个字符具有1个字节的文本文件因此,REGREG4格式的注册表文件不能包含代码值大于255(十进制,0xFF十六进制)的Unicode字符。

格式为Windows注册表编辑器5.00版的注册表文件支持根据Unicode标准以每个字符超过1个字节编码的文本因此REGEDIT格式为Windows注册表编辑器5.00的* .reg文件创建带有字节顺序标记(FF FE)的UTF-16 Little Endian编码文本文件

因此,如果要导入/导出的数据是二进制或仅使用ASCII字符(代码值<十进制128)作为所有注册表数据的99.99%的文本,则使用哪种文件格式都没有关系

对于非ASCII字符,知道Windows命令解释器使用哪个代码页已经很重要,因为这通常是OEM代码页,例如代码页437(美国,加拿大)或代码页850(西欧)与GUI代码页不同Windows-1252。在命令提示符窗口中运行,chcpmode con输出Windows命令解释器用于控制台的当前计算机上使用的默认代码页。

如果确实有必要也支持Unicode字符串,则必须使用Windows Registry Editor版本5.00格式

让我们看一个假设的Unicode示例:

在Windows注册表项下,HKCU\RegFormat定义了两个Unicode字符串:

  • REG_SZ名称Two Not Equal 3为Unicode字符串值的类型字符串:

    2 ≠ 3

  • REG_MULTI_SZ名称Formulas为Unicode字符串值的类型的多行字符串

    2 µs × 3 = 6 µs
    A = π × r²

有关注册表值类型的详细信息请参见Microsoft文章“注册表值类型”,“在注册表中分发注册表更改数据类型”

HKCU\RegFormatWindows注册表编辑器5.00版的格式导出密钥这是标准格式,因为Windows 2000会生成UTF-16 LE编码的文本文件,该文本文件的内容为596字节:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"="2 ≠ 3"
"Formulas"=hex(7):32,00,20,00,b5,00,73,00,20,00,d7,00,20,00,33,00,20,00,3d,00,\
  20,00,36,00,20,00,b5,00,73,00,00,00,41,00,20,00,3d,00,20,00,c0,03,20,00,d7,\
  00,20,00,72,00,b2,00,00,00,00,00

该文件的字节流在十六进制查看器/编辑器中显示为:

00000000h: FF FE 57 00 69 00 6E 00 64 00 6F 00 77 00 73 00 ; ÿþW.i.n.d.o.w.s.
00000010h: 20 00 52 00 65 00 67 00 69 00 73 00 74 00 72 00 ;  .R.e.g.i.s.t.r.
00000020h: 79 00 20 00 45 00 64 00 69 00 74 00 6F 00 72 00 ; y. .E.d.i.t.o.r.
00000030h: 20 00 56 00 65 00 72 00 73 00 69 00 6F 00 6E 00 ;  .V.e.r.s.i.o.n.
00000040h: 20 00 35 00 2E 00 30 00 30 00 0D 00 0A 00 0D 00 ;  .5...0.0.......
00000050h: 0A 00 5B 00 48 00 4B 00 45 00 59 00 5F 00 43 00 ; ..[.H.K.E.Y._.C.
00000060h: 55 00 52 00 52 00 45 00 4E 00 54 00 5F 00 55 00 ; U.R.R.E.N.T._.U.
00000070h: 53 00 45 00 52 00 5C 00 52 00 65 00 67 00 46 00 ; S.E.R.\.R.e.g.F.
00000080h: 6F 00 72 00 6D 00 61 00 74 00 5D 00 0D 00 0A 00 ; o.r.m.a.t.].....
00000090h: 22 00 54 00 77 00 6F 00 20 00 4E 00 6F 00 74 00 ; ".T.w.o. .N.o.t.
000000a0h: 20 00 45 00 71 00 75 00 61 00 6C 00 20 00 33 00 ;  .E.q.u.a.l. .3.
000000b0h: 22 00 3D 00 22 00 32 00 20 00 60 22 20 00 33 00 ; ".=.".2. .`" .3.
000000c0h: 22 00 0D 00 0A 00 22 00 46 00 6F 00 72 00 6D 00 ; ".....".F.o.r.m.
000000d0h: 75 00 6C 00 61 00 73 00 22 00 3D 00 68 00 65 00 ; u.l.a.s.".=.h.e.
000000e0h: 78 00 28 00 37 00 29 00 3A 00 33 00 32 00 2C 00 ; x.(.7.).:.3.2.,.
000000f0h: 30 00 30 00 2C 00 32 00 30 00 2C 00 30 00 30 00 ; 0.0.,.2.0.,.0.0.
00000100h: 2C 00 62 00 35 00 2C 00 30 00 30 00 2C 00 37 00 ; ,.b.5.,.0.0.,.7.
00000110h: 33 00 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 ; 3.,.0.0.,.2.0.,.
00000120h: 30 00 30 00 2C 00 64 00 37 00 2C 00 30 00 30 00 ; 0.0.,.d.7.,.0.0.
00000130h: 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 33 00 ; ,.2.0.,.0.0.,.3.
00000140h: 33 00 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 ; 3.,.0.0.,.2.0.,.
00000150h: 30 00 30 00 2C 00 33 00 64 00 2C 00 30 00 30 00 ; 0.0.,.3.d.,.0.0.
00000160h: 2C 00 5C 00 0D 00 0A 00 20 00 20 00 32 00 30 00 ; ,.\..... . .2.0.
00000170h: 2C 00 30 00 30 00 2C 00 33 00 36 00 2C 00 30 00 ; ,.0.0.,.3.6.,.0.
00000180h: 30 00 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 ; 0.,.2.0.,.0.0.,.
00000190h: 62 00 35 00 2C 00 30 00 30 00 2C 00 37 00 33 00 ; b.5.,.0.0.,.7.3.
000001a0h: 2C 00 30 00 30 00 2C 00 30 00 30 00 2C 00 30 00 ; ,.0.0.,.0.0.,.0.
000001b0h: 30 00 2C 00 34 00 31 00 2C 00 30 00 30 00 2C 00 ; 0.,.4.1.,.0.0.,.
000001c0h: 32 00 30 00 2C 00 30 00 30 00 2C 00 33 00 64 00 ; 2.0.,.0.0.,.3.d.
000001d0h: 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 30 00 ; ,.0.0.,.2.0.,.0.
000001e0h: 30 00 2C 00 63 00 30 00 2C 00 30 00 33 00 2C 00 ; 0.,.c.0.,.0.3.,.
000001f0h: 32 00 30 00 2C 00 30 00 30 00 2C 00 64 00 37 00 ; 2.0.,.0.0.,.d.7.
00000200h: 2C 00 5C 00 0D 00 0A 00 20 00 20 00 30 00 30 00 ; ,.\..... . .0.0.
00000210h: 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 37 00 ; ,.2.0.,.0.0.,.7.
00000220h: 32 00 2C 00 30 00 30 00 2C 00 62 00 32 00 2C 00 ; 2.,.0.0.,.b.2.,.
00000230h: 30 00 30 00 2C 00 30 00 30 00 2C 00 30 00 30 00 ; 0.0.,.0.0.,.0.0.
00000240h: 2C 00 30 00 30 00 2C 00 30 00 30 00 0D 00 0A 00 ; ,.0.0.,.0.0.....
00000250h: 0D 00 0A 00                                     ; ....

与代码页Windows-1252一起显示的前2个字节是ÿþUTF-16 LE BOM的两个字节,在文本编辑模式下文本编辑器不会显示这两个字节。

但是HKCU\RegFormat通过在导出对话框中单击文件类型下拉列表并选择Win9x / NT4注册表文件来导出REGEDIT4格式的密钥导致一个ANSI(更精确的是Windows-1252)编码的文本文件,其内容只有180个字节:

REGEDIT4

[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"="2 ? 3"
"Formulas"=hex(7):32,20,b5,73,20,d7,20,33,20,3d,20,36,20,b5,73,00,41,20,3d,20,\
  c0,20,d7,20,72,b2,00,00

该文件的字节流在十六进制查看器/编辑器中显示为:

00000000h: 52 45 47 45 44 49 54 34 0D 0A 0D 0A 5B 48 4B 45 ; REGEDIT4....[HKE
00000010h: 59 5F 43 55 52 52 45 4E 54 5F 55 53 45 52 5C 52 ; Y_CURRENT_USER\R
00000020h: 65 67 46 6F 72 6D 61 74 5D 0D 0A 22 54 77 6F 20 ; egFormat].."Two 
00000030h: 4E 6F 74 20 45 71 75 61 6C 20 33 22 3D 22 32 20 ; Not Equal 3"="2 
00000040h: 3F 20 33 22 0D 0A 22 46 6F 72 6D 75 6C 61 73 22 ; ? 3".."Formulas"
00000050h: 3D 68 65 78 28 37 29 3A 33 32 2C 32 30 2C 62 35 ; =hex(7):32,20,b5
00000060h: 2C 37 33 2C 32 30 2C 64 37 2C 32 30 2C 33 33 2C ; ,73,20,d7,20,33,
00000070h: 32 30 2C 33 64 2C 32 30 2C 33 36 2C 32 30 2C 62 ; 20,3d,20,36,20,b
00000080h: 35 2C 37 33 2C 30 30 2C 34 31 2C 32 30 2C 33 64 ; 5,73,00,41,20,3d
00000090h: 2C 32 30 2C 5C 0D 0A 20 20 63 30 2C 32 30 2C 64 ; ,20,\..  c0,20,d
000000a0h: 37 2C 32 30 2C 37 32 2C 62 32 2C 30 30 2C 30 30 ; 7,20,72,b2,00,00
000000b0h: 0D 0A 0D 0A                                     ; ....

有什么区别?

  1. REGEDIT首先将REG_SZ类型的字符串从Unicode转换为代码页Windows-1252,然后导出数据。结果是字符,?而不是类型字符串中带有Unicode值U + 2260的不等号REG_SZ因为该字符在Windows-1252代码页中不可用。

  2. 多行字符串只有十六进制值的一半(每个字符只有1个字节,而不是每个字符2个字节)。

  3. 具有Unicode值U + 03C0小型PI存储有值C0(仅低字节),因此现在是该字符,À因为此字符在Windows-1252代码页中的代码值为0xC0。

Windows注册表编辑器5.00版格式的文件中导入数据会导致在Windows注册表中获得与以前相同的数据。

但是从文件中以REGEDIT4格式导入数据会导致:

  • REG_SZ名称Two Not Equal 3为ANSI字符串值的类型字符串:

    2 ? 3

  • REG_MULTI_SZ名称Formulas为Unicode字符串值的类型的多行字符串

    2 µs × 3 = 6 µs
    A = À × r²

字符µ×²的代码值小于255(十进制),因此也可以正确存储在格式为REGEDIT4的注册表文件中但是并且π不能正确编码为格式4。

Windows注册表编辑器5.00版格式的注册表文件本身不能是Unicode编码的文本文件。也可以使用Windows-1252编码的注册表文件,其内容如下:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"=hex(1):32,00,60,22,33,00
"Formulas"=hex(7):32,00,20,00,b5,00,73,00,20,00,d7,00,20,00,33,00,20,00,3d,00,\
  20,00,36,00,20,00,b5,00,73,00,00,00,41,00,20,00,3d,00,20,00,c0,03,20,00,d7,\
  00,20,00,72,00,b2,00,00,00,00,00

在十六进制查看器/编辑器中显示为:

00000000h: 57 69 6E 64 6F 77 73 20 52 65 67 69 73 74 72 79 ; Windows Registry
00000010h: 20 45 64 69 74 6F 72 20 56 65 72 73 69 6F 6E 20 ;  Editor Version 
00000020h: 35 2E 30 30 0D 0A 0D 0A 5B 48 4B 45 59 5F 43 55 ; 5.00....[HKEY_CU
00000030h: 52 52 45 4E 54 5F 55 53 45 52 5C 52 65 67 46 6F ; RRENT_USER\RegFo
00000040h: 72 6D 61 74 5D 0D 0A 22 54 77 6F 20 4E 6F 74 20 ; rmat].."Two Not 
00000050h: 45 71 75 61 6C 20 33 22 3D 68 65 78 28 31 29 3A ; Equal 3"=hex(1):
00000060h: 33 32 2C 30 30 2C 36 30 2C 32 32 2C 33 33 2C 30 ; 32,00,60,22,33,0
00000070h: 30 0D 0A 22 46 6F 72 6D 75 6C 61 73 22 3D 68 65 ; 0.."Formulas"=he
00000080h: 78 28 37 29 3A 33 32 2C 30 30 2C 32 30 2C 30 30 ; x(7):32,00,20,00
00000090h: 2C 62 35 2C 30 30 2C 37 33 2C 30 30 2C 32 30 2C ; ,b5,00,73,00,20,
000000a0h: 30 30 2C 64 37 2C 30 30 2C 32 30 2C 30 30 2C 33 ; 00,d7,00,20,00,3
000000b0h: 33 2C 30 30 2C 32 30 2C 30 30 2C 33 64 2C 30 30 ; 3,00,20,00,3d,00
000000c0h: 2C 5C 0D 0A 20 20 32 30 2C 30 30 2C 33 36 2C 30 ; ,\..  20,00,36,0
000000d0h: 30 2C 32 30 2C 30 30 2C 62 35 2C 30 30 2C 37 33 ; 0,20,00,b5,00,73
000000e0h: 2C 30 30 2C 30 30 2C 30 30 2C 34 31 2C 30 30 2C ; ,00,00,00,41,00,
000000f0h: 32 30 2C 30 30 2C 33 64 2C 30 30 2C 32 30 2C 30 ; 20,00,3d,00,20,0
00000100h: 30 2C 63 30 2C 30 33 2C 32 30 2C 30 30 2C 64 37 ; 0,c0,03,20,00,d7
00000110h: 2C 5C 0D 0A 20 20 30 30 2C 32 30 2C 30 30 2C 37 ; ,\..  00,20,00,7
00000120h: 32 2C 30 30 2C 62 32 2C 30 30 2C 30 30 2C 30 30 ; 2,00,b2,00,00,00
00000130h: 2C 30 30 2C 30 30 0D 0A 0D 0A                   ; ,00,00....

尽管如此,导入此注册表文件仍会在Windows注册表中产生Unicode字符串:

2 ≠ 3
2 µs × 3 = 6 µs
A = À × r²

hex(1)对类型值使用二进制表示形式REG_SZ不是标准的。本示例由我手动创建,以说明REG_SZ也可以使用非Unicode编码的注册表文件导入类型的Unicode字符串,该文件更易于从批处理文件中生成。

但是,如果键或值名称本身包含代码值大于U + 00FF的Unicode字符,则确实有必要使用注册表文件格式Windows注册表编辑器5.00版,并且注册表文件也使用16位Unicode转换进行Unicode编码。格式为小端格式。

参见函数SHRegWriteUSValue以获取十六进制)... REG _ 注册表类型表。

顺便说一句:我写了一次UltraEdit脚本GetStringFromRegHex.js,以获取类型hex(2)...REG_EXPAND_SZhex(7)...的十六进制值,该类型REG_MULTI_SZ在文本编辑器UltraEdit中打开的注册表文件中选择显示为文本,因为十六进制值确实很难“读取”作为文字”。

命令行

%SystemRoot%\System32\regedit.exe /a /e "%USERPROFILE%\Desktop\EntireWindowsRegistry.reg"

使用注册表文件格式4将整个Windows注册表以ANSI格式导出到Windows桌面。

使用不带选项的同一命令行会/a导致使用注册表文件格式5以Unicode格式导出整个Windows注册表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Windows注册表编辑器中的编码错误

来自分类Dev

“您只能从注册表编辑器中导入二进制注册表文件。”

来自分类Dev

Winetricks 注册表编辑器窗口是空的

来自分类Dev

在GPO中禁用注册表编辑工具的同时使用Reg查询?MS Office版本查询

来自分类Dev

我可以刷新注册表编辑器控制台吗?

来自分类Dev

.txt文件上下文菜单>“打开”正在打开注册表编辑器

来自分类Dev

针对BadUSB使用注册表编辑器限制设备安装

来自分类Dev

编辑注册表项并使用批处理文件打开注册表

来自分类Dev

什么是“注册表编辑”,等同于使用MSCONFIG禁用Windows-7启动程序

来自分类Dev

有没有一种方法需要密码才能访问注册表编辑器(regedit)?

来自分类Dev

使用两个不同的工具编辑Windows注册表文件,结果不同

来自分类Dev

SBS 2011 Standard:禁用任务管理器和注册表编辑器

来自分类Dev

注册表编辑器中的级联上下文菜单

来自分类Dev

Registry.LocalMachine.OpenSubKey() 返回与注册表编辑器不同的结果

来自分类Dev

Powershell注册表搜索和编辑

来自分类Dev

命令行注册表编辑

来自分类Dev

批处理中的注册表编辑

来自分类Dev

Lua - 如何编辑注册表?

来自分类Dev

VB.NET-编辑Windows注册表值

来自分类Dev

如何在Windows 7中编辑注册表

来自分类Dev

使用Powershell在注册表中编辑CurrentControlSet

来自分类Dev

如何在Windows启动时从注册表启动jar文件?

来自分类Dev

如何在Windows启动时从注册表启动jar文件?

来自分类Dev

为什么本地计算机策略编辑器不支持注册表设置?

来自分类Dev

两个Windows注册表编辑器Regedit和Regedt32之间的主要区别是什么?

来自分类Dev

D 盘(SSD 分区)未在 Windows 10 中显示,在磁盘管理中显示为未命名,但在注册表编辑器中已命名

来自分类Dev

如何将.reg文件中的注册表项插入64位Windows上的32位注册表中

来自分类Dev

使用Perl解析Windows注册表

来自分类Dev

如何使用Java导出Windows注册表文件

Related 相关文章

  1. 1

    Windows注册表编辑器中的编码错误

  2. 2

    “您只能从注册表编辑器中导入二进制注册表文件。”

  3. 3

    Winetricks 注册表编辑器窗口是空的

  4. 4

    在GPO中禁用注册表编辑工具的同时使用Reg查询?MS Office版本查询

  5. 5

    我可以刷新注册表编辑器控制台吗?

  6. 6

    .txt文件上下文菜单>“打开”正在打开注册表编辑器

  7. 7

    针对BadUSB使用注册表编辑器限制设备安装

  8. 8

    编辑注册表项并使用批处理文件打开注册表

  9. 9

    什么是“注册表编辑”,等同于使用MSCONFIG禁用Windows-7启动程序

  10. 10

    有没有一种方法需要密码才能访问注册表编辑器(regedit)?

  11. 11

    使用两个不同的工具编辑Windows注册表文件,结果不同

  12. 12

    SBS 2011 Standard:禁用任务管理器和注册表编辑器

  13. 13

    注册表编辑器中的级联上下文菜单

  14. 14

    Registry.LocalMachine.OpenSubKey() 返回与注册表编辑器不同的结果

  15. 15

    Powershell注册表搜索和编辑

  16. 16

    命令行注册表编辑

  17. 17

    批处理中的注册表编辑

  18. 18

    Lua - 如何编辑注册表?

  19. 19

    VB.NET-编辑Windows注册表值

  20. 20

    如何在Windows 7中编辑注册表

  21. 21

    使用Powershell在注册表中编辑CurrentControlSet

  22. 22

    如何在Windows启动时从注册表启动jar文件?

  23. 23

    如何在Windows启动时从注册表启动jar文件?

  24. 24

    为什么本地计算机策略编辑器不支持注册表设置?

  25. 25

    两个Windows注册表编辑器Regedit和Regedt32之间的主要区别是什么?

  26. 26

    D 盘(SSD 分区)未在 Windows 10 中显示,在磁盘管理中显示为未命名,但在注册表编辑器中已命名

  27. 27

    如何将.reg文件中的注册表项插入64位Windows上的32位注册表中

  28. 28

    使用Perl解析Windows注册表

  29. 29

    如何使用Java导出Windows注册表文件

热门标签

归档