注册表脚本示例
本主题中的脚本编写示例演示了如何将项添加到系统注册表、注册注册器 COM 服务器并指定多个分析树。
将项添加到 HKEY_CURRENT_USER
以下分析树演示了一个简单的脚本,它将单个项添加到系统注册表。 具体而言,该脚本将项 MyVeryOwnKey
添加到 HKEY_CURRENT_USER
中。 它还将默认字符串值 HowGoesIt
分配给新项:
HKEY_CURRENT_USER
{
'MyVeryOwnKey' = s 'HowGoesIt'
}
可以轻松地扩展此脚本以定义多个子项,如下所示:
HKCU
{
'MyVeryOwnKey' = s 'HowGoesIt'
{
'HasASubkey'
{
'PrettyCool' = d '55'
val 'ANameValue' = s 'WithANamedValue'
}
}
}
现在,脚本会将子项 HasASubkey
添加到 MyVeryOwnKey
中。 在此子项中,它同时添加了 PrettyCool
子项(DWORD
的默认值为 55)和 ANameValue
命名值(字符串值为 WithANamedValue
)。
注册注册器 COM 服务器
以下脚本注册了注册器 COM 服务器本身。
HKCR
{
ATL.Registrar = s 'ATL Registrar Class'
{
CLSID = s '{44EC053A-400F-11D0-9DCD-00A0C90391D3}'
}
NoRemove CLSID
{
ForceRemove {44EC053A-400F-11D0-9DCD-00A0C90391D3} = s 'ATL Registrar Class'
{
ProgID = s 'ATL.Registrar'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
}
}
}
在运行时,此分析树将 ATL.Registrar
项添加到 HKEY_CLASSES_ROOT
中。 然后,对于这个新项,它执行了以下操作:
指定
ATL Registrar Class
为项的默认字符串值。添加
CLSID
为子项。为
CLSID
指定{44EC053A-400F-11D0-9DCD-00A0C90391D3}
。 (此值是注册器的 CLSID,用于CoCreateInstance
。)
由于 CLSID
是共享的,因此不应在“注销”模式下删除它。 语句 NoRemove CLSID
执行此操作,指示 CLSID
应在“注册”模式下打开,在“注销”模式下被忽略。
ForceRemove
语句提供了一种管理功能,在重新创建项之前删除一个项及其所有子项。 如果子项的名称已更改,这非常有用。 在此脚本编写示例中,ForceRemove
检查 {44EC053A-400F-11D0-9DCD-00A0C90391D3}
是否已存在。 如果存在,ForceRemove
会执行以下操作:
以递归方式删除
{44EC053A-400F-11D0-9DCD-00A0C90391D3}
及其所有子项。重新创建
{44EC053A-400F-11D0-9DCD-00A0C90391D3}
。添加
ATL Registrar Class
作为{44EC053A-400F-11D0-9DCD-00A0C90391D3}
的默认字符串值。
分析树现在向 {44EC053A-400F-11D0-9DCD-00A0C90391D3}
添加两个新的子项。 第一个项 ProgID
获取一个默认字符串值 ProgID。 第二个项 InprocServer32
获取默认字符串值 %MODULE%
,这是本文的使用可替换参数(注册器预处理器)部分中介绍的预处理器值。 InprocServer32
还获取一个命名值 ThreadingModel
,其字符串值为 Apartment
。
指定多个分析树
若要在脚本中指定多个分析树,只需将一个树放在另一个树的末尾。 例如,以下脚本将项 MyVeryOwnKey
添加到 HKEY_CLASSES_ROOT
和 HKEY_CURRENT_USER
的分析树中:
HKCR
{
'MyVeryOwnKey' = s 'HowGoesIt'
}
HKEY_CURRENT_USER
{
'MyVeryOwnKey' = s 'HowGoesIt'
}
注意
在注册器脚本中,4K 是最大令牌大小。 (标记是语法中任何可识别的元素。)在前面的脚本编写示例中,HKCR
、HKEY_CURRENT_USER
、'MyVeryOwnKey'
和 'HowGoesIt'
都是标记。