C#读写Windows系统注册表

news/2025/3/19 5:50:09/

在C#中,你可以使用Microsoft.Win32命名空间下的RegistryRegistryKey类来读取和写入系统注册表。以下是一些基本示例,展示了如何在WPF应用程序中实现这些操作。

读取注册表项

要读取注册表项,你可以使用以下方法:

using Microsoft.Win32;// ...private void ReadRegistryValue()
{// 打开一个注册表项,这里以读取当前用户的环境变量为例RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Environment");if (key != null){// 读取名为"Path"的注册表项的值string pathValue = key.GetValue("Path") as string;// 使用注册表项的值// ...// 关闭注册表项key.Close();}
}

写入注册表项

要写入注册表项,你可以使用以下方法:

using Microsoft.Win32;// ...private void WriteRegistryValue()
{// 打开一个注册表项,这里以当前用户的环境变量为例// 注意:需要有足够的权限来写入注册表RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Environment", writable: true);if (key != null){// 写入名为"TestValue"的注册表项的值key.SetValue("TestValue", "MyCustomValue", RegistryValueKind.String);// 关闭注册表项key.Close();// 通知系统环境变量已更改SendMessageTimeout((IntPtr)HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, "Environment", SMTO_ABORTIFHUNG, 100, IntPtr.Zero);}
}// 需要添加以下using声明
using System.Runtime.InteropServices;// 并声明以下P/Invoke方法和常量
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, IntPtr lpdwResult);private const uint WM_SETTINGCHANGE = 0x001A;
private const uint SMTO_ABORTIFHUNG = 0x0002;
private const int HWND_BROADCAST = 0xffff;

在上面的代码中,SetValue方法用于写入注册表,它的第一个参数是键的名称,第二个参数是键的值,第三个参数是键值的类型(在这个例子中是字符串)。

SendMessageTimeout是一个Windows API函数,通过P/Invoke调用来通知系统环境变量已经发生变化。这对于更新环境变量特别重要,因为许多应用程序(包括资源管理器)依赖于这些值,并且不会自动识别它们的改变。

警告和注意事项

  • 在修改注册表之前,请确保你了解你正在改变的内容。错误地修改注册表可能会导致系统不稳定甚至无法启动。
  • 在写入注册表之前,你的应用程序可能需要管理员权限。如果你的应用没有足够的权限,写入操作将会失败。
  • 对于关键的注册表修改,最好是先备份注册表,以防止发生不可预料的问题。
  • 在生产环境中,操作注册表前最好向用户明确说明或者请求确认。

http://www.ppmy.cn/news/1223620.html

相关文章

TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…

#[量化投资-学习笔记018]Python+TDengine从零开始搭建量化分析平台-正态分布与收益率

正态分布(Normal Distribution)又叫高斯分布、常态分布。通常用来描述随机变量的概率分布。 自然界的数据分布通常是符合正态分布规律的,比如说人的身高、体重。但是非自然界数据就不一定了。尤其是经过人为加工过的数据。 金融领域大量使用正态分布来计算收益率和…

C语言求0—7所能组成的奇数个数

完整代码&#xff1a; // 求0—7所能组成的奇数个数 //根据题意&#xff0c;应该是没有重复数字的&#xff0c;所以最大只能为八位数 //如果可以重复的话&#xff0c;那么位数就限制不了&#xff0c;然后奇数的个数就是无穷大了 #include <stdio.h>int main() {int coun…

【Shell实战】Linux多节点分发文件

多节点分发文件 通过shell脚本将跳板机或者软件中转机上的文件&#xff0c;分发至一组目标机器中。 使用前提&#xff1a; 跳板机或者软件中转机与目标集群均配置免密。目标机器的接收目录拥有足够的大小。 脚本使用说明&#xff1a; sh distributing_packages.sh /data/g…

阿里达摩院开源DAMO-YOLO

1.简介 DAMO-YOLO是一个兼顾速度与精度的目标检测框架&#xff0c;其效果超越了目前的一众YOLO系列方法&#xff0c;在实现SOTA的同时&#xff0c;保持了很高的推理速度。DAMO-YOLO是在YOLO框架基础上引入了一系列新技术&#xff0c;对整个检测框架进行了大幅的修改。具体包括…

自动驾驶-BEV感知综述

BEV感知综述 随着自动驾驶传感器配置多模态化、多源化&#xff0c;将多源信息在unified View下表达变得更加关键。BEV视角下构建的local map对于多源信息融合及理解更加直观简洁&#xff0c;同时对于后续规划控制模块任务的开展也更为方便。BEV感知的核心问题是&#xff1a; …

faiss-gpu安装失败

pip install faiss-gpu1.7.2 --no-cachefaiss-gpu版本需要与python版本相对应&#xff0c;而且python3.9以上版本大概率用不了faiss-gpu&#xff0c;如果自己的python版本过高请降低python版本试试。

合璧之光,共创辉煌|明道云伙伴大会2023圆满结束

2023年11月3日至11月4日&#xff0c;“合璧之光明道云伙伴大会2023”在上海星河湾酒店顺利举行&#xff0c;报名参会人数超过1800人。大会邀请到明道云标杆客户及合作伙伴分享组织落地零代码的经验及各行业领域解决方案&#xff0c;包括越秀集团、豫园股份、远大医药&#xff0…