Given a registry path "\a\b\c\d", I would like to add a value to key 'd'. The catch is - I don't know whether a,b, or c even exist, and I want the code to generate them if they do not exist. Is there a quick way (using some .NET method I haven't seen) to do this? I could go the route of iterating through registry keys and use the OpenSubKey/GetValue/SetValue methods to perform the process, but would like to avoid reinventing the wheel if I can...
N.B.: The behavior I am looking for is the same behavior you would get from running a .reg file (it will create the necessary subkeys).
Thanks,
Assaf
I don't know of a built-in, single call you can make to do this. However, you don't need to call OpenSubKey/GetValue, etc. A call to CreateSubKey
will create a new key, or open the existing key if it exists.
RegistryKey regKey = startingRootKey;
string[] RegKeys = pathToAdd.split('\'');
foreach (string key in RegKeys) {
regKey = regKey.CreateSubKey(key);
}
regKey.SetValue("ValueName", "Value");
Ignore the extra ' in there, I needed it to make the formatting look right. ??
Also, be sure you test for exceptions when doing registry key adds... there's a lot security- and path-wise that could go wrong. A list of exceptions to trap is here.
EDIT
I'm making this too complicated! I just tested... the following will do exactly what you want:
RegistryKey regKey = startingRootKey;
regKey = regKey.CreateSubKey(@"a\b\c\d");
regKey.SetValue("ValueName", "Value");
regKey.Close();
It's smart enough to parse the nested path. Just make sure you have the @ symbol, or it will treat the string is as if it were escaped.