1 ///<summary>
2 /// 注册表基项静态域
3 ///
4 /// 主要包括:
5 /// 1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键
6 /// 2.Registry.CurrentUser 对应于HKEY_CURRENT_USER主键
7 /// 3.Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键
8 /// 4.Registry.User 对应于 HKEY_USER主键
9 /// 5.Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键
10 /// 6.Registry.DynDa 对应于HKEY_DYN_DATA主键
11 /// 7.Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键
12 ///
13 /// 版本:1.0
14 ///</summary>
15 publicenum RegDomain
16 {
17 ///<summary>
18 /// 对应于HKEY_CLASSES_ROOT主键
19 ///</summary>
20 ClassesRoot =0,
21 ///<summary>
22 /// 对应于HKEY_CURRENT_USER主键
23 ///</summary>
24 CurrentUser =1,
25 ///<summary>
26 /// 对应于 HKEY_LOCAL_MACHINE主键
27 ///</summary>
28 LocalMachine =2,
29 ///<summary>
30 /// 对应于 HKEY_USER主键
31 ///</summary>
32 User =3,
33 ///<summary>
34 /// 对应于HEKY_CURRENT_CONFIG主键
35 ///</summary>
36 CurrentConfig =4,
37 ///<summary>
38 /// 对应于HKEY_DYN_DATA主键
39 ///</summary>
40 DynDa =5,
41 ///<summary>
42 /// 对应于HKEY_PERFORMANCE_DATA主键
43 ///</summary>
44 PerformanceData =6,
45 }
2.指定在注册表中存储值时所用的数据类型,或标识注册表中某个值的数据类型
2 /// 指定在注册表中存储值时所用的数据类型,或标识注册表中某个值的数据类型
3 ///
4 /// 主要包括:
5 /// 1.RegistryValueKind.Unknown
6 /// 2.RegistryValueKind.String
7 /// 3.RegistryValueKind.ExpandString
8 /// 4.RegistryValueKind.Binary
9 /// 5.RegistryValueKind.DWord
10 /// 6.RegistryValueKind.MultiString
11 /// 7.RegistryValueKind.QWord
12 ///
13 /// 版本:1.0
14 ///</summary>
15 publicenum RegValueKind
16 {
17 ///<summary>
18 /// 指示一个不受支持的注册表数据类型。例如,不支持 Microsoft Win32 API 注册表数据类型 REG_RESOURCE_LIST。使用此值指定
19 ///</summary>
20 Unknown =0,
21 ///<summary>
22 /// 指定一个以 Null 结尾的字符串。此值与 Win32 API 注册表数据类型 REG_SZ 等效。
23 ///</summary>
24 String =1,
25 ///<summary>
26 /// 指定一个以 NULL 结尾的字符串,该字符串中包含对环境变量(如 %PATH%,当值被检索时,就会展开)的未展开的引用。
27 /// 此值与 Win32 API注册表数据类型 REG_EXPAND_SZ 等效。
28 ///</summary>
29 ExpandString =2,
30 ///<summary>
31 /// 指定任意格式的二进制数据。此值与 Win32 API 注册表数据类型 REG_BINARY 等效。
32 ///</summary>
33 Binary =3,
34 ///<summary>
35 /// 指定一个 32 位二进制数。此值与 Win32 API 注册表数据类型 REG_DWORD 等效。
36 ///</summary>
37 DWord =4,
38 ///<summary>
39 /// 指定一个以 NULL 结尾的字符串数组,以两个空字符结束。此值与 Win32 API 注册表数据类型 REG_MULTI_SZ 等效。
40 ///</summary>
41 MultiString =5,
42 ///<summary>
43 /// 指定一个 64 位二进制数。此值与 Win32 API 注册表数据类型 REG_QWORD 等效。
44 ///</summary>
45 QWord =6,
46 }
3.注册表操作类
2 /// 注册表操作类
3 ///
4 /// 主要包括以下操作:
5 /// 1.创建注册表项
6 /// 2.读取注册表项
7 /// 3.判断注册表项是否存在
8 /// 4.删除注册表项
9 /// 5.创建注册表键值
10 /// 6.读取注册表键值
11 /// 7.判断注册表键值是否存在
12 /// 8.删除注册表键值
13 ///
14 /// 版本:1.0
15 ///</summary>
16 publicclass Register
17 {
18 #region 字段定义
19 ///<summary>
20 /// 注册表项名称
21 ///</summary>
22 privatestring _subkey;
23 ///<summary>
24 /// 注册表基项域
25 ///</summary>
26 private RegDomain _domain;
27 ///<summary>
28 /// 注册表键值
29 ///</summary>
30 privatestring _regeditkey;
31 #endregion
32
33 #region 属性
34 ///<summary>
35 /// 设置注册表项名称
36 ///</summary>
37 publicstring SubKey
38 {
39 //get { return _subkey; }
40 set { _subkey = value; }
41 }
42
43 ///<summary>
44 /// 注册表基项域
45 ///</summary>
46 public RegDomain Domain
47 {
48 ///get { return _domain; }
49 set { _domain = value; }
50 }
51
52 ///<summary>
53 /// 注册表键值
54 ///</summary>
55 publicstring RegeditKey
56 {
57 ///get{return _regeditkey;}
58 set { _regeditkey = value; }
59 }
60 #endregion
61
62 #region 构造函数
63 public Register()
64 {
65 ///默认注册表项名称
66 _subkey ="software\\";
67 ///默认注册表基项域
68 _domain = RegDomain.LocalMachine;
69 }
70
71 ///<summary>
72 /// 构造函数
73 ///</summary>
74 ///<param name="subKey">注册表项名称</param>
75 ///<param name="regDomain">注册表基项域</param>
76 public Register(string subKey, RegDomain regDomain)
77 {
78 ///设置注册表项名称
79 _subkey = subKey;
80 ///设置注册表基项域
81 _domain = regDomain;
82 }
83 #endregion
84
85 #region 公有方法
86 #region 创建注册表项
87 ///<summary>
88 /// 创建注册表项,默认创建在注册表基项 HKEY_LOCAL_MACHINE下面(请先设置SubKey属性)
89 /// 虚方法,子类可进行重写
90 ///</summary>
91 publicvirtualvoid CreateSubKey()
92 {
93 ///判断注册表项名称是否为空,如果为空,返回false
94 if (_subkey ==string.Empty || _subkey ==null)
95 {
96 return;
97 }
98
99 ///创建基于注册表基项的节点
100 RegistryKey key = GetRegDomain(_domain);
101
102 ///要创建的注册表项的节点
103 RegistryKey sKey;
104 if (!IsSubKeyExist())
105 {
106 sKey = key.CreateSubKey(_subkey);
107 }
108 //sKey.Close();
109 ///关闭对注册表项的更改
110 key.Close();
111 }
112
113 ///<summary>
114 /// 创建注册表项,默认创建在注册表基项 HKEY_LOCAL_MACHINE下面
115 /// 虚方法,子类可进行重写
116 /// 例子:如subkey是software\\higame\\,则将创建HKEY_LOCAL_MACHINE\\software\\higame\\注册表项
117 ///</summary>
118 ///<param name="subKey">注册表项名称</param>
119 publicvirtualvoid CreateSubKey(string subKey)
120 {
121 ///判断注册表项名称是否为空,如果为空,返回false
122 if (subKey ==string.Empty || subKey ==null)
123 {
124 return;
125 }
126
127 ///创建基于注册表基项的节点
128 RegistryKey key = GetRegDomain(_domain);
129
130 ///要创建的注册表项的节点
131 RegistryKey sKey;
132 if (!IsSubKeyExist(subKey))
133 {
134 sKey = key.CreateSubKey(subKey);
135 }
136 //sKey.Close();
137 ///关闭对注册表项的更改
138 key.Close();
139 }
140
141 ///<summary>
142 /// 创建注册表项,默认创建在注册表基项 HKEY_LOCAL_MACHINE下面
143 /// 虚方法,子类可进行重写
144 ///</summary>
145 ///<param name="regDomain">注册表基项域</param>
146 publicvirtualvoid CreateSubKey(RegDomain regDomain)
147 {
148 ///判断注册表项名称是否为空,如果为空,返回false
149 if (_subkey ==string.Empty || _subkey ==null)
150 {
151 return;
152 }
153
154 ///创建基于注册表基项的节点
155 RegistryKey key = GetRegDomain(regDomain);
156
157 ///要创建的注册表项的节点
158 RegistryKey sKey;
159 if (!IsSubKeyExist(regDomain))
160 {
161 sKey = key.CreateSubKey(_subkey);
162 }
163 //sKey.Close();
164 ///关闭对注册表项的更改
165 key.Close();
166 }
167
168 ///<summary>
169 /// 创建注册表项(请先设置SubKey属性)
170 /// 虚方法,子类可进行重写
171 /// 例子:如regDomain是HKEY_LOCAL_MACHINE,subkey是software\\higame\\,则将创建HKEY_LOCAL_MACHINE\\software\\higame\\注册表项
172 ///</summary>
173 ///<param name="subKey">注册表项名称</param>
174 ///<param name="regDomain">注册表基项域</param>
175 publicvirtualvoid CreateSubKey(string subKey, RegDomain regDomain)
176 {
177 ///判断注册表项名称是否为空,如果为空,返回false
178 if (subKey ==string.Empty || subKey ==null)
179 {
180 return;
181 }
182
183 ///创建基于注册表基项的节点
184 RegistryKey key = GetRegDomain(regDomain);
185
186 ///要创建的注册表项的节点
187 RegistryKey sKey;
188 if (!IsSubKeyExist(subKey, regDomain))
189 {
190 sKey = key.CreateSubKey(subKey);
191 }
192 //sKey.Close();
193 ///关闭对注册表项的更改
194 key.Close();
195 }
196 #endregion
197
198 #region 判断注册表项是否存在
199 ///<summary>
200
200 /// 判断注册表项是否存在,默认是在注册表基项HKEY_LOCAL_MACHINE下判断(请先设置SubKey属性) 201 /// 虚方法,子类可进行重写 202 /// 例子:如果设置了Domain和SubKey属性,则判断Domain\\SubKey,否则默认判断HKEY_LOCAL_MACHINE\\software\\ 203 /// </summary> 204 /// <returns>返回注册表项是否存在,存在返回true,否则返回false</returns> 205 public virtual bool IsSubKeyExist() 206 { 207 ///判断注册表项名称是否为空,如果为空,返回false 208 if (_subkey == string.Empty || _subkey == null) 209 { 210 return false; 211 } 212 213 ///检索注册表子项 214 ///如果sKey为null,说明没有该注册表项不存在,否则存在 215 RegistryKey sKey = OpenSubKey(_subkey, _domain); 216 if (sKey == null) 217 { 218 return false; 219 } 220 return true; 221 } 222 223 /// <summary> 224 /// 判断注册表项是否存在,默认是在注册表基项HKEY_LOCAL_MACHINE下判断 225 /// 虚方法,子类可进行重写 226 /// 例子:如subkey是software\\higame\\,则将判断HKEY_LOCAL_MACHINE\\software\\higame\\注册表项是否存在 227 /// </summary> 228 /// <param name="subKey">注册表项名称</param> 229 /// <returns>返回注册表项是否存在,存在返回true,否则返回false</returns> 230 public virtual bool IsSubKeyExist(string subKey) 231 { 232 ///判断注册表项名称是否为空,如果为空,返回false 233 if (subKey == string.Empty || subKey == null) 234 { 235 return false; 236 } 237 238 ///检索注册表子项 239 ///如果sKey为null,说明没有该注册表项不存在,否则存在 240 RegistryKey sKey = OpenSubKey(subKey); 241 if (sKey == null) 242 { 243 return false; 244 } 245 return true; 246 } 247 248 /// <summary> 249 /// 判断注册表项是否存在 250 /// 虚方法,子类可进行重写 251 /// 例子:如regDomain是HKEY_CLASSES_ROOT,则将判断HKEY_CLASSES_ROOT\\SubKey注册表项是否存在 252 /// </summary> 253 /// <param name="regDomain">注册表基项域</param> 254 /// <returns>返回注册表项是否存在,存在返回true,否则返回false</returns> 255 public virtual bool IsSubKeyExist(RegDomain regDomain) 256 { 257 ///判断注册表项名称是否为空,如果为空,返回false 258 if (_subkey == string.Empty || _subkey == null) 259 { 260 return false; 261 } 262 263 ///检索注册表子项 264 ///如果sKey为null,说明没有该注册表项不存在,否则存在 265 RegistryKey sKey = OpenSubKey(_subkey, regDomain); 266 if (sKey == null) 267 { 268 return false; 269 } 270 return true; 271 } 272 273 /// <summary> 274 /// 判断注册表项是否存在(请先设置SubKey属性) 275 /// 虚方法,子类可进行重写 276 /// 例子:如regDomain是HKEY_CLASSES_ROOT,subkey是software\\higame\\,则将判断HKEY_CLASSES_ROOT\\software\\higame\\注册表项是否存在 277 /// </summary> 278 /// <param name="subKey">注册表项名称</param> 279 /// <param name="regDomain">注册表基项域</param> 280 /// <returns>返回注册表项是否存在,存在返回true,否则返回false</returns> 281 public virtual bool IsSubKeyExist(string subKey, RegDomain regDomain) 282 { 283 ///判断注册表项名称是否为空,如果为空,返回false 284 if (subKey == string.Empty || subKey == null) 285 { 286 return false; 287 } 288 289 ///检索注册表子项 290 ///如果sKey为null,说明没有该注册表项不存在,否则存在 291 RegistryKey sKey = OpenSubKey(subKey, regDomain); 292 if (sKey == null) 293 { 294 return false; 295 } 296 return true; 297 } 298 #endregion 299 300 #region 删除注册表项 301 /// <summary> 302 /// 删除注册表项(请先设置SubKey属性) 303 /// 虚方法,子类可进行重写 304 /// </summary> 305 /// <returns>如果删除成功,则返回true,否则为false</returns> 306 public virtual bool DeleteSubKey() 307 { 308 ///返回删除是否成功 309 bool result = false; 310 311 ///判断注册表项名称是否为空,如果为空,返回false 312 if (_subkey == string.Empty || _subkey == null) 313 { 314 return false; 315 } 316 317 ///创建基于注册表基项的节点 318 RegistryKey key = GetRegDomain(_domain); 319 320 if (IsSubKeyExist()) 321 { 322 try 323 { 324 ///删除注册表项 325 key.DeleteSubKey(_subkey); 326 result = true; 327 } 328 catch 329 { 330 result = false; 331 } 332 } 333 ///关闭对注册表项的更改 334 key.Close(); 335 return result; 336 } 337 338 /// <summary> 339 /// 删除注册表项(请先设置SubKey属性) 340 /// 虚方法,子类可进行重写 341 /// </summary> 342 /// <param name="subKey">注册表项名称</param> 343 /// <returns>如果删除成功,则返回true,否则为false</returns> 344 public virtual bool DeleteSubKey(string subKey) 345 { 346 ///返回删除是否成功 347 bool result = false; 348 349 ///判断注册表项名称是否为空,如果为空,返回false 350 if (subKey == string.Empty || subKey == null) 351 { 352 return false; 353 } 354 355 ///创建基于注册表基项的节点 356 RegistryKey key = GetRegDomain(_domain); 357 358 if (IsSubKeyExist()) 359 { 360 try 361 { 362 ///删除注册表项 363 key.DeleteSubKey(subKey); 364 result = true; 365 } 366 catch 367 { 368 result = false; 369 } 370 } 371 ///关闭对注册表项的更改 372 key.Close(); 373 return result; 374 } 375 376 /// <summary> 377 /// 删除注册表项 378 /// 虚方法,子类可进行重写 379 /// </summary> 380 /// <param name="subKey">注册表项名称</param> 381 /// <param name="regDomain">注册表基项域</param> 382 /// <returns>如果删除成功,则返回true,否则为false</returns> 383 public virtual bool DeleteSubKey(string subKey, RegDomain regDomain) 384 { 385 ///返回删除是否成功 386 bool result = false; 387 388 ///判断注册表项名称是否为空,如果为空,返回false 389 if (subKey == string.Empty || subKey == null) 390 { 391 return false; 392 } 393 394 ///创建基于注册表基项的节点 395 RegistryKey key = GetRegDomain(regDomain); 396 397 if (IsSubKeyExist(subKey, regDomain)) 398 { 399 try 400 { 401 ///删除注册表项 402 key.DeleteSubKey(subKey); 403 result = true; 404 } 405 catch 406 { 407 result = false; 408 } 409 } 410 ///关闭对注册表项的更改 411 key.Close(); 412 return result; 413 } 414 #endregion 415 416 #region 判断键值是否存在 417 /// <summary> 418 /// 判断键值是否存在(请先设置SubKey和RegeditKey属性) 419 /// 虚方法,子类可进行重写 420 /// 1.如果RegeditKey为空、null,则返回false 421 /// 2.如果SubKey为空、null或者SubKey指定的注册表项不存在,返回false 422 /// </summary> 423 /// <returns>返回键值是否存在,存在返回true,否则返回false</returns> 424 public virtual bool IsRegeditKeyExist() 425 { 426 ///返回结果 427 bool result = false; 428 429 ///判断是否设置键值属性 430 if (_regeditkey == string.Empty || _regeditkey == null) 431 { 432 return false; 433 } 434 435 ///判断注册表项是否存在 436 if (IsSubKeyExist()) 437 { 438 ///打开注册表项 439 RegistryKey key = OpenSubKey(); 440 ///键值集合 441 string[] regeditKeyNames; 442 ///获取键值集合 443 regeditKeyNames = key.GetValueNames(); 444 ///遍历键值集合,如果存在键值,则退出遍历 445 foreach (string regeditKey in regeditKeyNames) 446 { 447 if (string.Compare(regeditKey, _regeditkey, true) == 0) 448 { 449 result = true; 450 break; 451 } 452 } 453 ///关闭对注册表项的更改 454 key.Close(); 455 } 456 return result; 457 } 458 459 /// <summary> 460 /// 判断键值是否存在(请先设置SubKey属性) 461 /// 虚方法,子类可进行重写 462 /// 如果SubKey为空、null或者SubKey指定的注册表项不存在,返回false 463 /// </summary> 464 /// <param name="name">键值名称</param> 465 /// <returns>返回键值是否存在,存在返回true,否则返回false</returns> 466 public virtual bool IsRegeditKeyExist(string name) 467 { 468 ///返回结果 469 bool result = false; 470 471 ///判断是否设置键值属性 472 if (name == string.Empty || name == null) 473 { 474 return false; 475 } 476 477 ///判断注册表项是否存在 478 if (IsSubKeyExist()) 479 { 480 ///打开注册表项 481 RegistryKey key = OpenSubKey(); 482 ///键值集合 483 string[] regeditKeyNames; 484 ///获取键值集合 485 regeditKeyNames = key.GetValueNames(); 486 ///遍历键值集合,如果存在键值,则退出遍历 487 foreach (string regeditKey in regeditKeyNames) 488 { 489 if (string.Compare(regeditKey, name, true) == 0) 490 { 491 result = true; 492 break; 493 } 494 } 495 ///关闭对注册表项的更改 496 key.Close(); 497 } 498 return result; 499 } 500 501 /// <summary> 502 /// 判断键值是否存在 503 /// 虚方法,子类可进行重写 504 /// </summary> 505 /// <param name="name">键值名称</param> 506 /// <param name="subKey">注册表项名称</param> 507 /// <returns>返回键值是否存在,存在返回true,否则返回false</returns> 508 public virtual bool IsRegeditKeyExist(string name, string subKey) 509 { 510 ///返回结果 511 bool result = false; 512 513 ///判断是否设置键值属性 514 if (name == string.Empty || name == null) 515 { 516 return false; 517 } 518 519 ///判断注册表项是否存在 520 if (IsSubKeyExist()) 521 { 522 ///打开注册表项 523 RegistryKey key = OpenSubKey(subKey); 524 ///键值集合 525 string[] regeditKeyNames; 526 ///获取键值集合 527 regeditKeyNames = key.GetValueNames(); 528 ///遍历键值集合,如果存在键值,则退出遍历 529 foreach (string regeditKey in regeditKeyNames) 530 { 531 if (string.Compare(regeditKey, name, true) == 0) 532 { 533 result = true; 534 break; 535 } 536 } 537 ///关闭对注册表项的更改 538 key.Close(); 539 } 540 return result; 541 } 542 543 /// <summary> 544 /// 判断键值是否存在 545 /// 虚方法,子类可进行重写 546 /// </summary> 547 /// <param name="name">键值名称</param> 548 /// <param name="subKey">注册表项名称</param> 549 /// <param name="regDomain">注册表基项域</param> 550 /// <returns>返回键值是否存在,存在返回true,否则返回false</returns> 551 public virtual bool IsRegeditKeyExist(string name, string subKey, RegDomain regDomain) 552 { 553 ///返回结果 554 bool result = false; 555 556 ///判断是否设置键值属性 557 if (name == string.Empty || name == null) 558 { 559 return false; 560 } 561 562 ///判断注册表项是否存在 563 if (IsSubKeyExist()) 564 { 565 ///打开注册表项 566 RegistryKey key = OpenSubKey(subKey, regDomain); 567 ///键值集合 568 string[] regeditKeyNames; 569 ///获取键值集合 570 regeditKeyNames = key.GetValueNames(); 571 ///遍历键值集合,如果存在键值,则退出遍历 572 foreach (string regeditKey in regeditKeyNames) 573 { 574 if (string.Compare(regeditKey, name, true) == 0) 575 { 576 result = true; 577 break; 578 } 579 } 580 ///关闭对注册表项的更改 581 key.Close(); 582 } 583 return result; 584 } 585 #endregion 586 587 #region 设置键值内容 588 /// <summary> 589 /// 设置指定的键值内容,不指定内容数据类型(请先设置RegeditKey和SubKey属性) 590 /// 存在改键值则修改键值内容,不存在键值则先创建键值,再设置键值内容 591 /// </summary> 592 /// <param name="content">键值内容</param> 593 /// <returns>键值内容设置成功,则返回true,否则返回false</returns> 594 public virtual bool WriteRegeditKey(object content) 595 { 596 ///返回结果 597 bool result = false; 598 599 ///判断是否设置键值属性 600 if (_regeditkey == string.Empty || _regeditkey == null) 601 { 602 return false; 603 } 604 605 ///判断注册表项是否存在,如果不存在,则直接创建 606 if (!IsSubKeyExist(_subkey)) 607 { 608 CreateSubKey(_subkey); 609 } 610 611 ///以可写方式打开注册表项 612 RegistryKey key = OpenSubKey(true); 613 614 ///如果注册表项打开失败,则返回false 615 if (key == null) 616 { 617 return false; 618 } 619 620 try 621 { 622 key.SetValue(_regeditkey, content); 623 result = true; 624 } 625 catch 626 { 627 result = false; 628 } 629 finally 630 { 631 ///关闭对注册表项的更改 632 key.Close(); 633 } 634 return result; 635 } 636 637 /// <summary> 638 /// 设置指定的键值内容,不指定内容数据类型(请先设置SubKey属性) 639 /// 存在改键值则修改键值内容,不存在键值则先创建键值,再设置键值内容 640 /// </summary> 641 /// <param name="name">键值名称</param> 642 /// <param name="content">键值内容</param> 643 /// <returns>键值内容设置成功,则返回true,否则返回false</returns> 644 public virtual bool WriteRegeditKey(string name, object content) 645 { 646 ///返回结果 647 bool result = false; 648 649 ///判断键值是否存在 650 if (name == string.Empty || name == null) 651 { 652 return false; 653 } 654 655 ///判断注册表项是否存在,如果不存在,则直接创建 656 if (!IsSubKeyExist(_subkey)) 657 { 658 CreateSubKey(_subkey); 659 } 660 661 ///以可写方式打开注册表项 662 RegistryKey key = OpenSubKey(true); 663 664 ///如果注册表项打开失败,则返回false 665 if (key == null) 666 { 667 return false; 668 } 669 670 try 671 { 672 key.SetValue(name, content); 673 result = true; 674 } 675 catch (Exception ex) 676 { 677 result = false; 678 } 679 finally 680 { 681 ///关闭对注册表项的更改 682 key.Close(); 683 } 684 return result; 685 } 686 687 /// <summary> 688 /// 设置指定的键值内容,指定内容数据类型(请先设置SubKey属性) 689 /// 存在改键值则修改键值内容,不存在键值则先创建键值,再设置键值内容 690 /// </summary> 691 /// <param name="name">键值名称</param> 692 /// <param name="content">键值内容</param> 693 /// <returns>键值内容设置成功,则返回true,否则返回false</returns> 694 public virtual bool WriteRegeditKey(string name, object content, RegValueKind regValueKind) 695 { 696 ///返回结果 697 bool result = false; 698 699 ///判断键值是否存在 700 if (name == string.Empty || name == null) 701 { 702 return false; 703 } 704 705 ///判断注册表项是否存在,如果不存在,则直接创建 706 if (!IsSubKeyExist(_subkey)) 707 { 708 CreateSubKey(_subkey); 709 } 710 711 ///以可写方式打开注册表项 712 RegistryKey key = OpenSubKey(true); 713 714 ///如果注册表项打开失败,则返回false 715 if (key == null) 716 { 717 return false; 718 } 719 720 try 721 { 722 key.SetValue(name, content, GetRegValueKind(regValueKind)); 723 result = true; 724 } 725 catch 726 { 727 result = false; 728 } 729 finally 730 { 731 ///关闭对注册表项的更改 732 key.Close(); 733 } 734 return result; 735 } 736 #endregion 737 738 #region 读取键值内容 739 /// <summary> 740 /// 读取键值内容(请先设置RegeditKey和SubKey属性) 741 /// 1.如果RegeditKey为空、null或者RegeditKey指示的键值不存在,返回null 742 /// 2.如果SubKey为空、null或者SubKey指示的注册表项不存在,返回null 743 /// 3.反之,则返回键值内容 744 /// </summary> 745 /// <returns>返回键值内容</returns> 746 public virtual object ReadRegeditKey() 747 { 748 ///键值内容结果 749 object obj = null; 750 751 ///判断是否设置键值属性 752 if (_regeditkey == string.Empty || _regeditkey == null) 753 { 754 return null; 755 } 756 757 ///判断键值是否存在 758 if (IsRegeditKeyExist(_regeditkey)) 759 { 760 ///打开注册表项 761 RegistryKey key = OpenSubKey(); 762 if (key != null) 763 { 764 obj = key.GetValue(_regeditkey); 765 } 766 ///关闭对注册表项的更改 767 key.Close(); 768 } 769 return obj; 770 } 771 772 /// <summary> 773 /// 读取键值内容(请先设置SubKey属性) 774 /// 1.如果SubKey为空、null或者SubKey指示的注册表项不存在,返回null 775 /// 2.反之,则返回键值内容 776 /// </summary> 777 /// <param name="name">键值名称</param> 778 /// <returns>返回键值内容</returns> 779 public virtual object ReadRegeditKey(string name) 780 { 781 ///键值内容结果 782 object obj = null; 783 784 ///判断是否设置键值属性 785 if (name == string.Empty || name == null) 786 { 787 return null; 788 } 789 790 ///判断键值是否存在 791 if (IsRegeditKeyExist(name)) 792 { 793 ///打开注册表项 794 RegistryKey key = OpenSubKey(); 795 if (key != null) 796 { 797 obj = key.GetValue(name); 798 } 799 ///关闭对注册表项的更改 800 key.Close(); 801 } 802 return obj; 803 } 804 805 /// <summary> 806 /// 读取键值内容 807 /// </summary> 808 /// <param name="name">键值名称</param> 809 /// <param name="subKey">注册表项名称</param> 810 /// <returns>返回键值内容</returns> 811 public virtual object ReadRegeditKey(string name, string subKey) 812 { 813 ///键值内容结果 814 object obj = null; 815 816 ///判断是否设置键值属性 817 if (name == string.Empty || name == null) 818 { 819 return null; 820 } 821 822 ///判断键值是否存在 823 if (IsRegeditKeyExist(name)) 824 { 825 ///打开注册表项 826 RegistryKey key = OpenSubKey(subKey); 827 if (key != null) 828 { 829 obj = key.GetValue(name); 830 } 831 ///关闭对注册表项的更改 832 key.Close(); 833 } 834 return obj; 835 } 836 837 /// <summary> 838 /// 读取键值内容 839 /// </summary> 840 /// <param name="name">键值名称</param> 841 /// <param name="subKey">注册表项名称</param> 842 /// <param name="regDomain">注册表基项域</param> 843 /// <returns>返回键值内容</returns> 844 public virtual object ReadRegeditKey(string name, string subKey, RegDomain regDomain) 845 { 846 ///键值内容结果 847 object obj = null; 848 849 ///判断是否设置键值属性 850 if (name == string.Empty || name == null) 851 { 852 return null; 853 } 854 855 ///判断键值是否存在 856 if (IsRegeditKeyExist(name)) 857 { 858 ///打开注册表项 859 RegistryKey key = OpenSubKey(subKey, regDomain); 860 if (key != null) 861 { 862 obj = key.GetValue(name); 863 } 864 ///关闭对注册表项的更改 865 key.Close(); 866 } 867 return obj; 868 } 869 #endregion 870 871 #region 删除键值 872 /// <summary> 873 /// 删除键值(请先设置RegeditKey和SubKey属性) 874 /// 1.如果RegeditKey为空、null或者RegeditKey指示的键值不存在,返回false 875 /// 2.如果SubKey为空、null或者SubKey指示的注册表项不存在,返回false 876 /// </summary> 877 /// <returns>如果删除成功,返回true,否则返回false</returns> 878 public virtual bool DeleteRegeditKey() 879 { 880 ///删除结果 881 bool result = false; 882 883 ///判断是否设置键值属性,如果没有设置,则返回false 884 if (_regeditkey == string.Empty || _regeditkey == null) 885 { 886 return false; 887 } 888 889 ///判断键值是否存在 890 if (IsRegeditKeyExist(_regeditkey)) 891 { 892 ///以可写方式打开注册表项 893 RegistryKey key = OpenSubKey(true); 894 if (key != null) 895 { 896 try 897 { 898 ///删除键值 899 key.DeleteValue(_regeditkey); 900 result = true; 901 } 902 catch 903 { 904 result = false; 905 } 906 finally 907 { 908 ///关闭对注册表项的更改 909 key.Close(); 910 } 911 } 912 } 913 914 return result; 915 } 916 917 /// <summary> 918 /// 删除键值(请先设置SubKey属性) 919 /// 如果SubKey为空、null或者SubKey指示的注册表项不存在,返回false 920 /// </summary> 921 /// <param name="name">键值名称</param> 922 /// <returns>如果删除成功,返回true,否则返回false</returns> 923 public virtual bool DeleteRegeditKey(string name) 924 { 925 ///删除结果 926 bool result = false; 927 928 ///判断键值名称是否为空,如果为空,则返回false 929 if (name == string.Empty || name == null) 930 { 931 return false; 932 } 933 934 ///判断键值是否存在 935 if (IsRegeditKeyExist(name)) 936 { 937 ///以可写方式打开注册表项 938 RegistryKey key = OpenSubKey(true); 939 if (key != null) 940 { 941 try 942 { 943 ///删除键值 944 key.DeleteValue(name); 945 result = true; 946 } 947 catch 948 { 949 result = false; 950 } 951 finally 952 { 953 ///关闭对注册表项的更改 954 key.Close(); 955 } 956 } 957 } 958 959 return result; 960 } 961 962 /// <summary> 963 /// 删除键值 964 /// </summary> 965 /// <param name="name">键值名称</param> 966 /// <param name="subKey">注册表项名称</param> 967 /// <returns>如果删除成功,返回true,否则返回false</returns> 968 public virtual bool DeleteRegeditKey(string name, string subKey) 969 { 970 ///删除结果 971 bool result = false; 972 973 ///判断键值名称和注册表项名称是否为空,如果为空,则返回false 974 if (name == string.Empty || name == null || subKey == string.Empty || subKey == null) 975 { 976 return false; 977 } 978 979 ///判断键值是否存在 980 if (IsRegeditKeyExist(name)) 981 { 982 ///以可写方式打开注册表项 983 RegistryKey key = OpenSubKey(subKey, true); 984 if (key != null) 985 { 986 try 987 { 988 ///删除键值 989 key.DeleteValue(name); 990 result = true; 991 } 992 catch 993 { 994 result = false; 995 } 996 finally 997 { 998 ///关闭对注册表项的更改 999 key.Close(); 1000 } 1001 } 1002 } 1003 1004 return result; 1005 } 1006 1007 /// <summary> 1008 /// 删除键值 1009 /// </summary> 1010 /// <param name="name">键值名称</param> 1011 /// <param name="subKey">注册表项名称</param> 1012 /// <param name="regDomain">注册表基项域</param> 1013 /// <returns>如果删除成功,返回true,否则返回false</returns> 1014 public virtual bool DeleteRegeditKey(string name, string subKey, RegDomain regDomain) 1015 { 1016 ///删除结果 1017 bool result = false; 1018 1019 ///判断键值名称和注册表项名称是否为空,如果为空,则返回false 1020 if (name == string.Empty || name == null || subKey == string.Empty || subKey == null) 1021 { 1022 return false; 1023 } 1024 1025 ///判断键值是否存在 1026 if (IsRegeditKeyExist(name)) 1027 { 1028 ///以可写方式打开注册表项 1029 RegistryKey key = OpenSubKey(subKey, regDomain, true); 1030 if (key != null) 1031 { 1032 try 1033 { 1034 ///删除键值 1035 key.DeleteValue(name); 1036 result = true; 1037 } 1038 catch 1039 { 1040 result = false; 1041 } 1042 finally 1043 { 1044 ///关闭对注册表项的更改 1045 key.Close(); 1046 } 1047 } 1048 } 1049 1050 return result; 1051 } 1052 #endregion 1053 #endregion 1054 1055 #region 受保护方法 1056 /// <summary> 1057 /// 获取注册表基项域对应顶级节点 1058 /// 例子:如regDomain是ClassesRoot,则返回Registry.ClassesRoot 1059 /// </summary> 1060 /// <param name="regDomain">注册表基项域</param> 1061 /// <returns>注册表基项域对应顶级节点</returns> 1062 protected RegistryKey GetRegDomain(RegDomain regDomain) 1063 { 1064 ///创建基于注册表基项的节点 1065 RegistryKey key; 1066 1067 #region 判断注册表基项域 1068 switch (regDomain) 1069 { 1070 case RegDomain.ClassesRoot: 1071 key = Registry.ClassesRoot; break; 1072 case RegDomain.CurrentUser: 1073 key = Registry.CurrentUser; break; 1074 case RegDomain.LocalMachine: 1075 key = Registry.LocalMachine; break; 1076 case RegDomain.User: 1077 key = Registry.Users; break; 1078 case RegDomain.CurrentConfig: 1079 key = Registry.CurrentConfig; break; 1080 case RegDomain.DynDa: 1081 key = Registry.DynData; break; 1082 case RegDomain.PerformanceData: 1083 key = Registry.PerformanceData; break; 1084 default: 1085 key = Registry.LocalMachine; break; 1086 } 1087 #endregion 1088 1089 return key; 1090 } 1091 1092 /// <summary> 1093 /// 获取在注册表中对应的值数据类型 1094 /// 例子:如regValueKind是DWord,则返回RegistryValueKind.DWord 1095 /// </summary> 1096 /// <param name="regValueKind">注册表数据类型</param> 1097 /// <returns>注册表中对应的数据类型</returns> 1098 protected RegistryValueKind GetRegValueKind(RegValueKind regValueKind) 1099 { 1100 RegistryValueKind regValueK; 1101 1102 #region 判断注册表数据类型 1103 switch (regValueKind) 1104 { 1105 case RegValueKind.Unknown: 1106 regValueK = RegistryValueKind.Unknown; break; 1107 case RegValueKind.String: 1108 regValueK = RegistryValueKind.String; break; 1109 case RegValueKind.ExpandString: 1110 regValueK = RegistryValueKind.ExpandString; break; 1111 case RegValueKind.Binary: 1112 regValueK = RegistryValueKind.Binary; break; 1113 case RegValueKind.DWord: 1114 regValueK = RegistryValueKind.DWord; break; 1115 case RegValueKind.MultiString: 1116 regValueK = RegistryValueKind.MultiString; break; 1117 case RegValueKind.QWord: 1118 regValueK = RegistryValueKind.QWord; break; 1119 default: 1120 regValueK = RegistryValueKind.String; break; 1121 } 1122 #endregion 1123 return regValueK; 1124 } 1125 1126 #region 打开注册表项 1127 /// <summary> 1128 /// 打开注册表项节点,以只读方式检索子项 1129 /// 虚方法,子类可进行重写 1130 /// </summary> 1131 /// <returns>如果SubKey为空、null或者SubKey指示注册表项不存在,则返回null,否则返回注册表节点</returns> 1132 protected virtual RegistryKey OpenSubKey() 1133 { 1134 ///判断注册表项名称是否为空 1135 if (_subkey == string.Empty || _subkey == null) 1136 { 1137 return null; 1138 } 1139 1140 ///创建基于注册表基项的节点 1141 RegistryKey key = GetRegDomain(_domain); 1142 1143 ///要打开的注册表项的节点 1144 RegistryKey sKey = null; 1145 ///打开注册表项 1146 sKey = key.OpenSubKey(_subkey); 1147 ///关闭对注册表项的更改 1148 key.Close(); 1149 ///返回注册表节点 1150 return sKey; 1151 } 1152 1153 /// <summary> 1154 /// 打开注册表项节点 1155 /// 虚方法,子类可进行重写 1156 /// </summary> 1157 /// <param name="writable">如果需要项的写访问权限,则设置为 true</param> 1158 /// <returns>如果SubKey为空、null或者SubKey指示注册表项不存在,则返回null,否则返回注册表节点</returns> 1159 protected virtual RegistryKey OpenSubKey(bool writable) 1160 { 1161 ///判断注册表项名称是否为空 1162 if (_subkey == string.Empty || _subkey == null) 1163 { 1164 return null; 1165 } 1166 1167 ///创建基于注册表基项的节点 1168 RegistryKey key = GetRegDomain(_domain); 1169 1170 ///要打开的注册表项的节点 1171 RegistryKey sKey = null; 1172 ///打开注册表项 1173 sKey = key.OpenSubKey(_subkey, writable); 1174 ///关闭对注册表项的更改 1175 key.Close(); 1176 ///返回注册表节点 1177 return sKey; 1178 } 1179 1180 /// <summary> 1181 /// 打开注册表项节点,以只读方式检索子项 1182 /// 虚方法,子类可进行重写 1183 /// </summary> 1184 /// <param name="subKey">注册表项名称</param> 1185 /// <returns>如果SubKey为空、null或者SubKey指示注册表项不存在,则返回null,否则返回注册表节点</returns> 1186 protected virtual RegistryKey OpenSubKey(string subKey) 1187 { 1188 ///判断注册表项名称是否为空 1189 if (subKey == string.Empty || subKey == null) 1190 { 1191 return null; 1192 } 1193 1194 ///创建基于注册表基项的节点 1195 RegistryKey key = GetRegDomain(_domain); 1196 1197 ///要打开的注册表项的节点 1198 RegistryKey sKey = null; 1199 ///打开注册表项 1200 sKey = key.OpenSubKey(subKey); 1201 ///关闭对注册表项的更改 1202 key.Close(); 1203 ///返回注册表节点 1204 return sKey; 1205 } 1206 1207 /// <summary> 1208 /// 打开注册表项节点,以只读方式检索子项 1209 /// 虚方法,子类可进行重写 1210 /// </summary> 1211 /// <param name="subKey">注册表项名称</param> 1212 /// <param name="writable">如果需要项的写访问权限,则设置为 true</param> 1213 /// <returns>如果SubKey为空、null或者SubKey指示注册表项不存在,则返回null,否则返回注册表节点</returns> 1214 protected virtual RegistryKey OpenSubKey(string subKey, bool writable) 1215 { 1216 ///判断注册表项名称是否为空 1217 if (subKey == string.Empty || subKey == null) 1218 { 1219 return null; 1220 } 1221 1222 ///创建基于注册表基项的节点 1223 RegistryKey key = GetRegDomain(_domain); 1224 1225 ///要打开的注册表项的节点 1226 RegistryKey sKey = null; 1227 ///打开注册表项 1228 sKey = key.OpenSubKey(subKey, writable); 1229 ///关闭对注册表项的更改 1230 key.Close(); 1231 ///返回注册表节点 1232 return sKey; 1233 } 1234 1235 /// <summary> 1236 /// 打开注册表项节点,以只读方式检索子项 1237 /// 虚方法,子类可进行重写 1238 /// </summary> 1239 /// <param name="subKey">注册表项名称</param> 1240 /// <param name="regDomain">注册表基项域</param> 1241 /// <returns>如果SubKey为空、null或者SubKey指示注册表项不存在,则返回null,否则返回注册表节点</returns> 1242 protected virtual RegistryKey OpenSubKey(string subKey, RegDomain regDomain) 1243 { 1244 ///判断注册表项名称是否为空 1245 if (subKey == string.Empty || subKey == null) 1246 { 1247 return null; 1248 } 1249 1250 ///创建基于注册表基项的节点 1251 RegistryKey key = GetRegDomain(regDomain); 1252 1253 ///要打开的注册表项的节点 1254 RegistryKey sKey = null; 1255 ///打开注册表项 1256 sKey = key.OpenSubKey(subKey); 1257 ///关闭对注册表项的更改 1258 key.Close(); 1259 ///返回注册表节点 1260 return sKey; 1261 } 1262 1263 /// <summary> 1264 /// 打开注册表项节点 1265 /// 虚方法,子类可进行重写 1266 /// </summary> 1267 /// <param name="subKey">注册表项名称</param> 1268 /// <param name="regDomain">注册表基项域</param> 1269 /// <param name="writable">如果需要项的写访问权限,则设置为 true</param> 1270 /// <returns>如果SubKey为空、null或者SubKey指示注册表项不存在,则返回null,否则返回注册表节点</returns> 1271 protected virtual RegistryKey OpenSubKey(string subKey, RegDomain regDomain, bool writable) 1272 { 1273 ///判断注册表项名称是否为空 1274 if (subKey == string.Empty || subKey == null) 1275 { 1276 return null; 1277 } 1278 1279 ///创建基于注册表基项的节点 1280 RegistryKey key = GetRegDomain(regDomain); 1281 1282 ///要打开的注册表项的节点 1283 RegistryKey sKey = null; 1284 ///打开注册表项 1285 sKey = key.OpenSubKey(subKey, writable); 1286 ///关闭对注册表项的更改 1287 key.Close(); 1288 ///返回注册表节点 1289 return sKey; 1290 } 1291 #endregion 1292 #endregion 1293 }