Ejemplo n.º 1
0
        /// <summary>
        /// 把指定值加入到Path环境变量中去
        /// </summary>
        /// <param name="value">指定值(末尾如果有分号或者反斜杠会被去除)</param>
        /// <param name="append">为true时将值追加到Path变量之后,否则插入到最前</param>
        public static void AddValueToPath(string value, bool append)
        {
            // 先获取Path变量值
            List <string> originValues = new List <string>(RegUtils.GetPathVariable(false));

            // 处理传入值
            value = FilePathUtils.RemovePathEndBackslash(value.Replace("/", "\\"));
            // 检查重复
            if (ListUtils.ListContainsIgnoreCase(originValues, value))
            {
                MessageBox.Show("该路径已经存在于Path变量中!无需再次添加!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            // 开始加入
            if (append)
            {
                originValues.Add(value);
            }
            else
            {
                originValues.Insert(0, value);
            }
            // 保存Path变量值
            if (SavePath(originValues.ToArray()))
            {
                MessageBox.Show("已成功添加路径至Path变量!若没有立即生效,请关闭现有已打开终端或者重启电脑再试!", "完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("添加路径到Path变量失败!请关闭该程序然后右键-以管理员身份运行该程序再试!", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 把Path变量中的C:\Windows替换为%SystemRoot%的引用形式
        /// </summary>
        /// <returns>返回已经替换成系统引用后的Path变量副本</returns>
        public static string[] ReplacePathSystemRootReference()
        {
            string systemRootValue = Environment.GetFolderPath(Environment.SpecialFolder.Windows);
            string systemRootName  = "%SystemRoot%";

            string[] pathValues = RegUtils.GetPathVariable(false);
            for (int i = 0; i < pathValues.Length; i++)
            {
                string prefix;
                // 检测路径是否是C:\Windows打头
                if (pathValues[i].Length >= systemRootValue.Length)
                {
                    prefix = pathValues[i].Substring(0, systemRootValue.Length);
                    if (prefix.Equals(systemRootValue, StringComparison.CurrentCultureIgnoreCase))
                    {
                        pathValues[i] = pathValues[i].Replace(prefix, systemRootName);
                        continue;
                    }
                }
                // 否则,规整大小写
                if (pathValues[i].Length >= systemRootName.Length)
                {
                    prefix = pathValues[i].Substring(0, systemRootName.Length);
                    if (prefix.Equals(systemRootName, StringComparison.CurrentCultureIgnoreCase) && !prefix.Equals(systemRootName))
                    {
                        pathValues[i] = pathValues[i].Replace(prefix, systemRootName);
                    }
                }
            }
            return(pathValues);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// 返回格式化后的Path变量的副本(将斜杠换成反斜杠并去掉末尾的反斜杠)
 /// </summary>
 /// <param name="expand">是否展开其中的变量引用</param>
 /// <returns>格式化后的Path变量列表</returns>
 public static string[] GetFormatedPathValues(bool expand)
 {
     string[] pathValues = RegUtils.GetPathVariable(expand);
     for (int i = 0; i < pathValues.Length; i++)
     {
         pathValues[i] = FilePathUtils.RemovePathEndBackslash(pathValues[i].Replace("/", "\\"));
     }
     return(pathValues);
 }
Ejemplo n.º 4
0
        /// <summary>
        /// 把一个数组保存为环境变量Path的值
        /// </summary>
        /// <param name="pathValues">给定数组</param>
        /// <returns>是否保存成功</returns>
        public static bool SavePath(string[] pathValues)
        {
            string saveTotalValue = string.Join(";", pathValues) + ";";

            RunSetx("Path", saveTotalValue, true);
            if (saveTotalValue.Equals(string.Join(";", RegUtils.GetPathVariable(false)) + ";"))
            {
                return(true);
            }
            return(false);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// 管理Path窗口初始化
 /// </summary>
 private void ManagePathForm_Load(object sender, EventArgs e)
 {
     string[] pathValues = RegUtils.GetPathVariable(false);
     foreach (string value in pathValues)
     {
         pathContentValue.Items.Add(value);
     }
     buttonToolTip.SetToolTip(up, "上移选定元素");
     buttonToolTip.SetToolTip(down, "下移选定元素");
     buttonToolTip.SetToolTip(remove, "移除选定元素");
     buttonToolTip.SetToolTip(add, "在选定元素之后插入路径,若未选择元素则在尾部插入");
     buttonToolTip.SetToolTip(edit, "编辑所选元素,也可以双击相应的元素进行编辑");
 }
Ejemplo n.º 6
0
        /// <summary>
        /// 从Path环境变量中移除不存在的路径
        /// </summary>
        /// <returns>返回移除了不存在的路径后的Path变量</returns>
        public static string[] RemoveNotExistPathInPathValues()
        {
            List <string> result = new List <string>(RegUtils.GetPathVariable(false));
            Dictionary <string, string> variables = GetVariablesInPath();
            string eachPath;

            for (int i = 0; i < result.Count; i++)
            {
                // 如果这个值中包含%,说明是变量引用形式,获取其实际值
                if (result[i].Contains("%"))
                {
                    // 变量列表中不存在该值,说明这个值是不存在的路径
                    eachPath = FilePathUtils.RemovePathEndBackslash(result[i].Replace("/", "\\"));
                    if (!variables.ContainsKey(eachPath))
                    {
                        result.RemoveAt(i);
                        i--;
                        continue;
                    }
                    eachPath = FilePathUtils.RemovePathEndBackslash(variables[eachPath].Replace("/", "\\"));
                    // 否则,进一步检测其对应路径是否存在
                    if (!Directory.Exists(eachPath) && !File.Exists(eachPath))
                    {
                        result.RemoveAt(i);
                        i--;
                    }
                }
                else
                {
                    // 否则就是普通路径,检测是否存在即可
                    eachPath = FilePathUtils.RemovePathEndBackslash(result[i].Replace("/", "\\"));
                    if (!Directory.Exists(eachPath) && !File.Exists(eachPath))
                    {
                        result.RemoveAt(i);
                        i--;
                    }
                }
            }
            return(result.ToArray());
        }