在安装的时候如何追加path系统环境变量
卸载时如何去掉path系统环境变量追加的那一部分

解决方案 »

  1.   

    -
    C#读取并设置path环境变量实现重启计算机代码
    在网上找的,没验证过。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.Win32;//注册表操作要引用的空间
    using System.Runtime.InteropServices;//调用API函数需要的引用,来加载非托管类user32.dllnamespace 用程序修改环境变量
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
            }
            /// <summary>
            /// 读取注册表
            /// path的路径:[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void tbnRead_Click(object sender, EventArgs e)
            {
                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);//打开MSSQLServer下的MSSQLServer
                this.richTextBox1.Text = regEnvironment.GetValue("path").ToString();//读取path的值
            }
            private void btnClose_Click(object sender, EventArgs e)
            {
                Close();
            }
            /// <summary>
            ///
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]//SendMessageTimeout是在user32.dll中定义的
            public static extern IntPtr SendMessageTimeout(
         IntPtr windowHandle,
         uint Msg,
         IntPtr wParam,
         IntPtr lParam,
         SendMessageTimeoutFlags flags,
         uint timeout,
         out IntPtr result
         );
            [Flags]
            public enum SendMessageTimeoutFlags : uint
            {
                SMTO_NORMAL = 0x0000,
                SMTO_BLOCK = 0x0001,
                SMTO_ABORTIFHUNG = 0x0002,
                SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
            }
            private void btnWrite_Click(object sender, EventArgs e)
            {
                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);//打开MSSQLServer下的MSSQLServer
                regEnvironment.SetValue("path", this.richTextBox1.Text);//读取path的值            MessageBox.Show("修改成功");
                //下面利用发送系统消息,就不要重新启动计算机了
               const int HWND_BROADCAST=0xffff;
               // DWORD dwMsgResult = 0L;
               const uint WM_SETTINGCHANGE = 0;
               const long SMTO_ABORTIFHUNG = 0x2;
              System.UInt32 dwMsgResult1=0;
              long s;
             // SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (string)"Environment", SMTO_ABORTIFHUNG, 5000,(long)s);
            }
            /// <summary>
            /// 重新启动计算机
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            [DllImport("user32.dll")]
            //主要API是这个,注意:必须声明为static extern
            private static extern int ExitWindowsEx(int x, int y);
            private void button1_Click(object sender, EventArgs e)
            {
                ExitWindowsEx(2,0);
            }
        }
    }
      

  2.   

    用.Net提供的方法就好,不必读写注册表string path = Environment.GetEnvironmentVariable("path");
    string new_path = your_path + ";" + path;
    Environment.SetEnvironmentVariable("path", new_path, EnvironmentVariableTarget.Machine);