using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; namespace WindowsForms設置系統變量 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //var str = SysEnvironment.GetSysEnvironmentByName("Path"); //系統變量 Path // SysEnvironment.SetSysEnvironment("Path", "0"); //HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment 下的Path值 SysEnvironment.SetPathAfter(@"C:\mysql\bin"); MessageBox.Show("完成!" + @"C:\mysql\bin;"); var str = SysEnvironment.GetSysEnvironmentByName("Path"); //系統變量 Path string[] temp = str.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < temp.Length; i++) { textBox1.Text += temp[i] + "\r\n"; } } private void button2_Click(object sender, EventArgs e) { ////RunCmd(@"C:\Windows\System32\","ipconfig"); //System.Diagnostics.Process.Start(@"C:\Windows\System32\cmd.exe"); //textBox2.Text += Cmd(@"CD C:\mysql mysqld --defaults-file=my.ini --initialize-insecure"); } ///<summary> /// cmd命令執行,在cmd上可以執行的語句,直接傳到這里,調用grads畫圖實例如下: /// Cmd("C:/OpenGrADS/Contents/Cygwin/Versions/2.0.1.oga.1/i686/grads.exe -lbcx 'D:/data_wrfchem/gs/d01_hour_pm25.gs D:/data_wrfchem 2016-04-18 d01'"); /// Cmd("grads啟動程序exe路徑 -lbcx 'gs腳本文件 參數1 參數2 參數3'"); /// </summary> /// <param name="c">執行語句</param> public string Cmd(string c) { System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardInput = true; process.Start(); process.StandardInput.WriteLine(c); process.StandardInput.AutoFlush = true; process.StandardInput.WriteLine("exit"); StreamReader reader = process.StandardOutput;//截取輸出流 //string output = reader.ReadLine();//每次讀取一行 //while (!reader.EndOfStream) //{ // // PrintThrendInfo(output); // output = reader.ReadLine(); //} string output = reader.ReadToEnd();//每次讀取一行 process.WaitForExit(); return output; } } public static class SysEnvironment { #region --獲取注冊表中的環境變量 /// <summary> /// 獲取系統環境變量 /// </summary> /// <param name="name"></param> /// <returns></returns> public static string GetSysEnvironmentByName(string name) { string result = string.Empty; try { result = OpenSysEnvironment().GetValue(name).ToString();//讀取 } catch (Exception) { return string.Empty; } return result; } /// <summary> /// 打開系統環境變量注冊表 /// </summary> /// <returns>RegistryKey</returns> private static RegistryKey OpenSysEnvironment() { RegistryKey regLocalMachine = Registry.LocalMachine; RegistryKey regSYSTEM = regLocalMachine.OpenSubKey("SYSTEM", true);//打開HKEY_LOCAL_MACHINE下的SYSTEM RegistryKey regControlSet001 = regSYSTEM.OpenSubKey("ControlSet001", true);//打開ControlSet001 RegistryKey regControl = regControlSet001.OpenSubKey("Control", true);//打開Control RegistryKey regManager = regControl.OpenSubKey("Session Manager", true);//打開Control RegistryKey regEnvironment = regManager.OpenSubKey("Environment", true); return regEnvironment; } /// <summary> /// 設置系統環境變量 /// </summary> /// <param name="name">變量名</param> /// <param name="strValue">值</param> public static void SetSysEnvironment(string name, string strValue) { OpenSysEnvironment().SetValue(name, strValue); } #endregion /// <summary> /// 檢測系統環境變量是否存在 /// </summary> /// <param name="name"></param> /// <returns></returns> public static bool CheckSysEnvironmentExist(string name) { if (!string.IsNullOrEmpty(GetSysEnvironmentByName(name))) return true; else return false; } /// <summary> /// 添加到PATH環境變量(會檢測路徑是否存在,存在就不重復) /// </summary> /// <param name="strPath"></param> public static void SetPathAfter(string strHome) { string pathlist; pathlist = GetSysEnvironmentByName("PATH"); bool isPathExist = false; if (pathlist.Length > 1) { //檢測是否以;結尾 if (pathlist.Substring(pathlist.Length - 1, 1) != ";") //截取最后一個字符,判斷這個字符不等於;號, { SetSysEnvironment("PATH", pathlist + ";"); pathlist = GetSysEnvironmentByName("PATH"); } string[] list = pathlist.Split(';');//以;切割 foreach (string item in list) { if (item == strHome) isPathExist = true; } } if (!isPathExist) { SetSysEnvironment("PATH", pathlist + strHome + ";"); } } public static void SetPathBefore(string strHome) { string pathlist; pathlist = GetSysEnvironmentByName("PATH"); string[] list = pathlist.Split(';'); bool isPathExist = false; foreach (string item in list) { if (item == strHome) isPathExist = true; } if (!isPathExist) { SetSysEnvironment("PATH", strHome + ";" + pathlist); } } public static void SetPath(string strHome) { string pathlist; pathlist = GetSysEnvironmentByName("PATH"); string[] list = pathlist.Split(';'); bool isPathExist = false; foreach (string item in list) { if (item == strHome) isPathExist = true; } if (!isPathExist) { SetSysEnvironment("PATH", pathlist + strHome + ";"); } } } //Kernel32.DLL內有SetEnvironmentVariable函數用於設置系統環境變量 //C#調用要用DllImport,代碼封裝如下: class SetSysEnvironmentVariable { [DllImport("Kernel32.DLL ", SetLastError = true)] public static extern bool SetEnvironmentVariable(string lpName, string lpValue); public static void SetPath(string pathValue) { string pathlist; pathlist = SysEnvironment.GetSysEnvironmentByName("PATH"); string[] list = pathlist.Split(';'); bool isPathExist = false; foreach (string item in list) { if (item == pathValue) isPathExist = true; } if (!isPathExist) { SetEnvironmentVariable("PATH", pathlist + pathValue + ";"); } } } }