C#读取设置path环境变量并重启计算机[转载]

本文介绍了一种使用 C# 编程语言修改 Windows 系统环境变量的方法。通过注册表操作,无需重启计算机即可实现环境变量的更新。文章提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候需要修改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.dll


namespace 用程序修改环境变量
{
    
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);
        }

    }

}


转载于:https://www.cnblogs.com/suyuan/archive/2008/05/21/1203732.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值