C#操作注册表,设置系统环境变量

C#操作注册表,设置系统环境变量

起因

最近重装系统,NX9.0太大了,不想重装,原来的话重装LicenceServer后,NX9.0是可以直接打开的,但是.NET二次开发的时候有错误,这次试一下添加注册表后,可不可以进行二次开发. 
需要添加的

UGII_BASE_DIR UGII_LANG UGII_ROOT_DIR
D:\Program Files\Siemens\NX 9.0 UGII_LANG D:\Program Files\Siemens\NX 9.0\UGII

因为懒得进[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]添加,也是为了以后方便打算,所以写了一个C#操作注册表的控制台程序.

代码

添加一个叫SysEnvironment的类,用来封装各个操作函数.

  
  
  
  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Microsoft.Win32;
  7. using System.Runtime.InteropServices;
  8. namespace 设置系统环境变量
  9. {
  10. class SysEnvironment
  11. {
  12. /// <summary>
  13. /// 获取系统环境变量
  14. /// </summary>
  15. /// <param name="name">输入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
  16. /// 下key的对应的字符串</param>
  17. /// <returns>Key对应的字符串</returns>
  18. public static string GetSysEnvironmentByName(string key)
  19. {
  20. string result = string.Empty;
  21. try
  22. {
  23. result = OpenSysEnvironment().GetValue(key).ToString();
  24. }
  25. catch (Exception)
  26. {
  27. return result;
  28. }
  29. return result;
  30. }
  31. /// <summary>
  32. /// 获得RegistryKey,值为
  33. /// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
  34. /// </summary>
  35. /// <returns></returns>
  36. public static RegistryKey OpenSysEnvironment()
  37. {
  38. RegistryKey regLocalMachine = Registry.LocalMachine;
  39. //打开HKEY_LOCAL_MACHINE下的SYSTEM,true表示具有写权限
  40. //RegistryKey regSystem = regLocalMachine.OpenSubKey("System", true);
  41. //RegistryKey regControlSet = regSystem.OpenSubKey("CurrentControlSet", true).OpenSubKey("Control",true).OpenSubKey("Session Manager",true);
  42. RegistryKey regEnvironment = regLocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Session Manager\Environment", true);
  43. return regEnvironment;
  44. }
  45. /// <summary>
  46. /// 设置系统环境变量
  47. /// </summary>
  48. /// <param name="name">变量名</param>
  49. /// <param name="strValue">值</param>
  50. /// <param name="i">用来表示在路径首添加,还是在路径末尾添加</param>
  51. public static string SetSysEnvironment(string key, string strValue)
  52. {
  53. string pathList = null;
  54. if (CheckSysEnvironmentExist(key) == false)
  55. {
  56. //如果环境变量不存在,直接key-value添加就可
  57. OpenSysEnvironment().SetValue(key, strValue);
  58. return "已成功将所给key的环境变量设为value!";
  59. }
  60. else
  61. {
  62. //如果环境变量存在,需要首先检查value是否已经包含在key所对应的string中,
  63. //如果不包含在其中,就添加,否则,直接返回就可
  64. pathList = GetSysEnvironmentByName(key);
  65. if (pathList.Contains(strValue))
  66. {
  67. return "所给key的环境变量已包含value!";//已设置过,不用再次设置
  68. }
  69. if (!pathList.EndsWith(";"))
  70. {
  71. OpenSysEnvironment().SetValue(key, pathList + ";");
  72. pathList = GetSysEnvironmentByName(key);
  73. }
  74. else
  75. {
  76. OpenSysEnvironment().SetValue(key, pathList + strValue);
  77. return "已成功在环境变量尾追加所给变量!";
  78. }
  79. }
  80. }
  81. /// <summary>
  82. /// 检测系统环境变量是否存在
  83. /// </summary>
  84. /// <param name="name">要修改path的Key</param>
  85. /// <returns></returns>
  86. public static Boolean CheckSysEnvironmentExist(string key)
  87. {
  88. if (!string.IsNullOrEmpty(GetSysEnvironmentByName(key)))
  89. {
  90. return true;
  91. }
  92. else
  93. {
  94. return false;
  95. }
  96. }
  97. }
  98. }

Main函数里主要是读取输入的东西,并调用上述函数.

  
  
  
  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace 设置系统环境变量
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. Console.WriteLine(@"请输入您要输入的键值对,用空格分割,如 Path C:\Go");
  13. string keyValue = Console.ReadLine();
  14. while (keyValue != "z")
  15. {
  16. string[] result = keyValue.Split(new char[]{' '},StringSplitOptions.RemoveEmptyEntries);
  17. string key = result[0];//这几行主要是处理输入路径中空格的情况,输入的是D:\Program Files\Siemens\NX 9.0\UGII,也不会因为空格而变成 D:\Program
  18. string value = keyValue.Trim().Remove(0, key.Length).Trim(' ');
  19. Console.WriteLine("key:{0} \t value:{1}", key, value);
  20. Console.WriteLine(SysEnvironment.SetSysEnvironment(key, value));
  21. Console.WriteLine("请输入下一键值对,按z加上回车结束程序");
  22. keyValue = Console.ReadLine();
  23. }
  24. Console.ReadKey();
  25. }
  26. }
  27. }

参考博客:http://www.cnblogs.com/ITBread/archive/2012/04/15/2450367.html

你可能感兴趣的:(注册表)