开发者

How to add nested Registry Key/Value in C#?

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开发者_JAVA百科, 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.


I don't think there's anything built in, but doing a string split on the registry path and then looping through it and doing CreateSubKey (instead of OpenSubKey so it creates missing ones) on each part is ok in my view.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜