注册表

返回 Windows

Windows 注册表结构、常用键位置、reg 命令行操作及 PowerShell 访问方式。


结构概览

注册表是 Windows 的层级数据库,存储系统和应用配置。

根键(Hive)

根键缩写说明
HKEY_LOCAL_MACHINEHKLM本机硬件和系统配置,对所有用户生效
HKEY_CURRENT_USERHKCU当前登录用户的配置
HKEY_USERSHKU所有用户配置的根,HKCU 是其子集
HKEY_CLASSES_ROOTHKCR文件关联和 COM 对象(HKLM+HKCU 合并视图)
HKEY_CURRENT_CONFIGHKCC当前硬件配置文件

值类型

类型说明
REG_SZ字符串
REG_EXPAND_SZ含环境变量的字符串(如 %SystemRoot%
REG_MULTI_SZ多字符串(换行分隔)
REG_DWORD32 位整数
REG_QWORD64 位整数
REG_BINARY二进制数据

图形界面

regedit    打开注册表编辑器
  • Ctrl+F 搜索键/值/数据
  • 收藏夹菜单可保存常用路径
  • 右键键 → 导出,备份为 .reg 文件

reg 命令

查询

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\SYSTEM\CurrentControlSet\Services /s       :: 递归查询
reg query HKLM\SOFTWARE /f "Python" /s                    :: 搜索含 Python 的键名
reg query HKLM\SOFTWARE /f "7890"   /s /d                 :: 搜索数据中含 7890 的值

添加与修改

reg add "HKCU\Software\MyApp" /v "Setting" /t REG_SZ    /d "value" /f
reg add "HKCU\Software\MyApp" /v "Enable"  /t REG_DWORD /d 1       /f
reg add "HKCU\Software\MyApp" /v "Path"    /t REG_EXPAND_SZ /d "%APPDATA%\MyApp" /f
reg add "HKCU\Software\MyApp\SubKey" /f    :: 仅创建键(无值)
:: /f 强制覆盖,不提示

删除

reg delete "HKCU\Software\MyApp" /v "Setting" /f   :: 删除指定值
reg delete "HKCU\Software\MyApp"               /f   :: 删除整个键及子键

备份与恢复

reg export HKCU\Software\MyApp  C:\backup\myapp.reg   :: 导出(备份)
reg export HKLM\SYSTEM          C:\backup\system.reg
 
reg import C:\backup\myapp.reg                         :: 导入(恢复)

远程操作

reg query \\RemotePC\HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
reg add   \\RemotePC\HKCU\Software\MyApp /v "Key" /t REG_SZ /d "val" /f

PowerShell 操作

PowerShell 将注册表根键映射为 PSDrive(HKLM: / HKCU:):

# 查看键和值
Get-Item     "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion"
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
Get-ChildItem    "HKLM:\SOFTWARE"   # 列出子键
 
# 读取单个值
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName
 
# 写入值
Set-ItemProperty  "HKCU:\Software\MyApp" -Name "Setting" -Value "hello"
New-ItemProperty  "HKCU:\Software\MyApp" -Name "Count"   -Value 1 -PropertyType DWord
 
# 新建键
New-Item "HKCU:\Software\MyApp\SubKey" -Force
 
# 删除值
Remove-ItemProperty "HKCU:\Software\MyApp" -Name "Setting"
 
# 删除键(递归)
Remove-Item "HKCU:\Software\MyApp" -Recurse -Force

常用键位置

自启动

HKCU\Software\Microsoft\Windows\CurrentVersion\Run        当前用户自启动
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce   当前用户一次性启动
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run       所有用户自启动
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce  所有用户一次性启动

系统信息

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
  ProductName, DisplayVersion, BuildLab, InstallDate

HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0
  ProcessorNameString

网络代理

HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings
  ProxyEnable   DWORD  1=启用, 0=禁用
  ProxyServer   SZ     "127.0.0.1:7890"
  ProxyOverride SZ     "localhost;127.*;10.*;*.local"

文件关联

HKCR\.txt                          默认 ProgID(如 txtfile)
HKCR\txtfile\shell\open\command    实际执行命令
(Get-ItemProperty "HKCR:\.txt")."(default)"

服务

HKLM\SYSTEM\CurrentControlSet\Services\<服务名>
  Start:      0=Boot  1=System  2=Auto  3=Manual  4=Disabled
  ImagePath:  可执行文件路径
  ObjectName: 运行账户

UAC

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
  EnableLUA                    1=启用 UAC, 0=禁用
  ConsentPromptBehaviorAdmin   0=不提示, 2=同意提示(默认), 5=最高

环境变量

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment  系统变量
HKCU\Environment                                                    用户变量

.reg 文件格式

Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\MyApp]
"StringVal"="hello world"
"DwordVal"=dword:00000001
"BinaryVal"=hex:01,02,03,04
@="default value"
 
; 删除键:[-HKEY_CURRENT_USER\Software\OldApp]
; 删除值:"OldValue"=-

注册表权限

# 查看键权限
(Get-Acl "HKLM:\SOFTWARE\MyApp").Access | Format-Table
 
# 授予权限(需管理员)
$acl  = Get-Acl "HKLM:\SOFTWARE\MyApp"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule(
    "Users", "ReadKey", "ContainerInherit", "None", "Allow"
)
$acl.SetAccessRule($rule)
$acl | Set-Acl "HKLM:\SOFTWARE\MyApp"

相关文档