The scripting examples in this article demonstrate how to add a key to the system registry; register the Registrar COM server; and specify multiple parse trees.
The following parse tree illustrates a simple script that adds a single key to the system registry. In particular, the script adds the key, MyVeryOwnKey
, to HKEY_CURRENT_USER
. It also assigns the default string value of HowGoesIt?
to the new key:
HKEY_CURRENT_USER
{
'MyVeryOwnKey' = s 'HowGoesIt?'
}
This script can easily be extended to define multiple subkeys as follows:
HKCU
{
'MyVeryOwnKey' = s 'HowGoesIt?'
{
'HasASubkey'
{
'PrettyCool?' = d '55'
val 'ANameValue' = s 'WithANamedValue'
}
}
}
Now, the script adds a subkey, HasASubkey
, to MyVeryOwnKey
. To this subkey, it adds both the PrettyCool?
subkey (with a default DWORD value of 55) and the ANameValue
named value (with a string value of WithANamedValue)
.
The following script registers the Registrar COM server itself.
HKCR
{
ATL.Registrar = s 'ATL 2.0 Registrar Class'
{
CLSID = s '{44EC053A-400F-11D0-9DCD-00A0C90391D3}'
}
NoRemove CLSID
{
ForceRemove {44EC053A-400F-11D0-9DCD-00A0C90391D3} =
s 'ATL 2.0 Registrar Class'
{
ProgID = s 'ATL.Registrar'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
}
}
}
At run time, this parse tree adds the ATL.Registrar
key to HKEY_CLASSES_ROOT
. To this new key, it then:
ATL Registrar 2.0 Class
as the key's default string value.CLSID
as a subkey.{44EC053A-400F-11D0-9DCD-00A0C90391D3}
for CLSID
. (This value is the Registrar's CLSID for use with CoCreateInstance.)
Since CLSID
is shared, it should not be removed in Unregister mode. The statement, NoRemove CLSID
, does this by indicating that CLSID
should be opened in Register mode and ignored in Unregister mode.
The ForceRemove
statement provides a housekeeping function by removing a key and all its subkeys before recreating the key. This can be useful if the names of the subkeys have changed. In this scripting example, ForceRemove
checks to see if {44EC053A-400F-11D0-9DCD-00A0C90391D3}
already exists. If it does, ForceRemove
:
{44EC053A-400F-11D0-9DCD-00A0C90391D3}
and all of its subkeys.{44EC053A-400F-11D0-9DCD-00A0C90391D3}
.ATL Registrar 2.0 Class
as the default string value for {44EC053A-400F-11D0-9DCD-00A0C90391D3}
.
The parse tree now adds two new subkeys to {44EC053A-400F-11D0-9DCD-00A0C90391D3}
. The first key, ProgID
, gets a default string value that is the ProgID. The second key, InprocServer32
, gets a default string value, %MODULE%
, that is a preprocessor value explained in the section, Using Replaceable Parameters (The Registrar's Preprocessor), of this article. InprocServer32
also gets a named value, ThreadingModel
, with a string value of Apartment
.
In order to specify more than one parse tree in a script, simply place one tree at the end of another. For example, the following script adds the key, MyVeryOwnKey
, to the parse trees for both HKEY_CLASSES_ROOT
and HKEY_CURRENT_USER
:
HKCR
{
'MyVeryOwnKey' = s 'HowGoesIt?'
}
HKEY_CURRENT_USER
{
'MyVeryOwnKey' = s 'HowGoesIt?'
}
Note In a Registrar script, 4K is the maximum token size. (A token is any recognizable element in the syntax). In the previous scripting example, HKCR
, HKEY_CURRENT_USER
, 'MyVeryOwnKey'
, and 'HowGoesIt?'
are all tokens.