当前位置: 首页 > news >正文

C#注册表技术及操作

目录

一、注册表基础

1.Registry和RegistryKey类 

(1)Registry类

(2)RegistryKey类

二、在C#中操作注册表

1.读取注册表中的信息 

(1)OpenSubKey()方法

(2)GetSubKeyNames()方法

(3)GetValueNames()方法

2.创建和修改注册表信息

(1)创建注册表信息

(2)修改注册表信息

3.删除注册表中的信息

(1)DeleteSubKey()方法

(2)DeleteSubKeyTree方法

(3)DeleteValue()方法 


        注册表是一个庞大的数据库系统,它记录了用户安装在计算机上的软件、硬件信息和每一个程序的相互关系。注册表中存放着很多参数,直接控制着整个系统的启动、硬件驱动程序的装载以及应用程序的运行。

        由于Windows 10系统本身的安全性问题,使用C#操作注册表时,可能会提示无法操作相应的注册表项,这时只需要为提示的注册表项添加everyone用户的读写权限即可

一、注册表基础

        Windows注册表包含Windows安装、用户喜好以及已安装软件和设备的所有配置信息的核心存储库。

1.RegistryRegistryKey类 

        NET Framework提供了访问注册表的类,比较常用的是Registry和RegistryKey类,这两个类都在Microsoft.Win32命名空间中。

(1)Registry类

        Registry类不能被实例化,它的作用只是实例化RegistryKey类,以便开始在注册表中浏览。Registry类是通过静态属性来提供这些实例的,这些属性共有7个:

属   性

说   明

ClassesRoot

定义文档的类型(或类)以及与那些类型关联的属性。该字段读取Windows注册表基项HKEY_CLASSES_ROOT

CurrentConfig

包含有关非用户特定的硬件的配置信息。该字段读取Windows注册表基项HKEY_CURRENT_CONFIG

CurrentUser

包含有关当前用户首选项的信息。该字段读取Windows注册表基项HKEY_CURRENT_USER

DynData

包含动态注册表数据。该字段读取Windows注册表基项HKEY_DYN_DATA

LocalMachine

包含本地计算机的配置数据。该字段读取Windows注册表基项HKEY_LOCAL_MACHINE

PerformanceData

包含软件组件的性能信息。该字段读取Windows注册表基项HKEY_PERFORMANCE_DATA

Users

包含有关默认用户配置的信息。该字段读取Windows注册表基项HKEY_USERS

        Registry类主要用于存储有关用户首选项的信息、存储本地计算机的配置信息、存储有关类型和类及其属性的信息、存储有关默认用户配置的信息、存储软件组件的性能信息、存储非用户特定的硬件信息、存储动态数据。

(2)RegistryKey类

        RegistryKey实例表示一个注册表项,这个类的方法可以浏览子键、创建新键、读取或修改键中的值。也就是说,该类可以完成对注册表项的所有操作。除了设置键的安全级别之外,RegistryKey类可以用于完成对注册表的所有操作。

        RegistryKey类的常用属性及说明:

属    性

说    明

Name

   检索项的名称

SubKeyCount

   检索当前项的子项数目

ValueCount

   检索项中值的计数

        RegistryKey类的常用方法及说明

方法

说 明

 Close

   关闭键

CreateSubkey

   创建给定名称的子键(如果该子键已经存在,就打开它)

DeleteSubkey

   删除指定的子键

DeleteSubkeyTree

   彻底删除子键及其所有的子键

DeleteValue

   从键中刑除一个指定的值

GetSubkeyNames

   返回包含子键名称的字符串数组

 GetValue

   返回指定的值

GetValueNames

   返回一个包含所有键值名称的字符申数组

OpenSubKey

   返回表示给定子键的 RegistryKey 实例引用

 SetValue

   设置指定

二、C#中操作注册表

        主要包括读取注册表中的信息删除注册表中的信息以及创建和删除注册表信息

1.读取注册表中的信息 

       读取注册表中的信息主要是通过RegistryKey类中的OpenSubKey()方法、GetSubKeyNames()方法和GetValueNames()方法实现的。

(1)OpenSubKey()方法

        OpenSubKey()方法用于检索指定的子项。

public RegistryKey OpenSubKey(string name)
☑ name:要以只读方式打开的子项的名称或路径。
☑ 返回值:请求的子项。如果操作失败,则为空引用。

        如果要打开的项不存在,OpenSubKey()方法将返回null引用,而不是引发异常。

(2)GetSubKeyNames()方法

        GetSubKeyNames()方法用于检索包含所有子项名称的字符串数组。

public string[]GetSubKeyNames()
返回值:包含当前项的子项名称的字符串数组。 

        如果当前项已被删除,或是用户没有读取该项的权限,将触发异常。

// 通过GetSubKeyNames()方法检索
// HKEY_LOCAL_MACHINE\SOFTWARE子键下包含的
// 所有子项名称的字符串数组
using Microsoft.Win32;namespace _01
{public partial class Form1 : Form{private RichTextBox? richTextBox1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // richTextBox1// richTextBox1 = new RichTextBox{Dock = DockStyle.Fill,Location = new Point(0, 0),Name = "richTextBox1",Size = new Size(284, 241),TabIndex = 0,Text = ""};RegistryKey regkey = Registry.LocalMachine;RegistryKey? sys = regkey.OpenSubKey(@"SOFTWARE");foreach (string str in sys!.GetSubKeyNames()){richTextBox1.Text += str + "\n";}// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(284, 241);Controls.Add(richTextBox1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";           }}
}

 

(3)GetValueNames()方法

        GetValueNames()方法用于检索包含与此项关联的所有值名称的字符串数组。

public string[]GetValueNames()
返回值:包含当前项的值名称的字符串数组。  

        如果没有找到此项的值名称,则返回一个空数组;如果在注册表项设置了一个具有默认值的名称为空字符串的项,则GetValueNames()方法返回的数组中包含该空字符串。

// 读取HKEY_LOCAL_MACHINE\SOFTWARE子键下的项目信息
// 利用对象的OpenSubKey()方法打开指定的键
using Microsoft.Win32;namespace _02
{public partial class Form1 : Form{private ListBox? listBox1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){listBox1 = new ListBox{Dock = DockStyle.Fill,FormattingEnabled = true,ItemHeight = 12,Location = new Point(0, 0),Name = "listBox1",Size = new Size(294, 271),TabIndex = 0};listBox1.Items.Clear();var regkey = Registry.LocalMachine;RegistryKey? sys = regkey.OpenSubKey(@"SOFTWARE");foreach (string str in sys!.GetSubKeyNames()){listBox1.Items.Add("子项名:" + str);RegistryKey? sikey = sys.OpenSubKey(str);  //打开子键foreach (string sVName in sikey!.GetValueNames()){listBox1.Items.Add(sVName + sikey.GetValue(sVName));}}// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(294, 271);Controls.Add(listBox1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";}}
}

 

2.创建和修改注册表信息

(1)创建注册表信息

        通过RegistryKey类的CreateSubKey()方法和SetValue()方法可以创建注册表信息,下面介绍这两种方法。

  • CreateSubKey()方法

        主要用于创建一个新子项或打开一个现有子项以进行写访问。 

public RegistryKey CreateSubKey (string subkey)
☑ subkey:要创建或打开的子项的名称或路径。
☑ 返回值:RegistryKey对象,表示新建的子项或空引用。如果为subkey指定了零长度字符串,则返回当前的RegistryKey对象。
  • SetValue()方法

        主要用于设置注册表项中的名称/值对的值。

public void SetValue (string name,Object value)
☑ name:要存储的值的名称。
☑ value:要存储的数据。

        SetValue()方法用于从非托管代码中访问托管类,不应从托管代码调用。

// 通过RegistryKey类的CreateSubKey()方法和SetValue()方法创建一个子键
using Microsoft.Win32;namespace _03
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{                Location = new Point(12, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "创建子键",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(384, 211);Controls.Add(button1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "创建子键";}/// <summary>/// 在主键HKEY_LOCAL_MACHINE的HARDWARE键下创建一个名为MR的子键,/// 然后在这个子键下再创建一个名为测试的子键,/// 在测试子键下创建一个名为value、数据值是1234的键值/// </summary>private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;RegistryKey? software = hklm.OpenSubKey("HARDWARE", true);RegistryKey? main1 = software!.CreateSubKey("MR");RegistryKey? ddd = main1.CreateSubKey("测试");ddd.SetValue("value", "1234");MessageBox.Show("创建成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

 

(2)修改注册表信息

        由于注册表中的信息十分重要,所以一般不要对其进行写的操作。也可能是这个原因,在.Net Framework中并没有提供修改注册表键的方法。而只是提供了一个危害性相对较小的SetValue()方法,通过这个方法,可以修改键值。在使用SetValue()方法时,如果它检测到指定的键值不存在,就会创建一个新的键值。 

// 将主键HKEY_LOCAL_MACHINE\HARDWARE\MR\测试
// 下名为value的键值的数据值修改为abcd
using Microsoft.Win32;namespace _04
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(197, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "修改",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(284, 111);Controls.Add(button1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";}private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;RegistryKey? software = hklm?.OpenSubKey("HARDWARE", true);RegistryKey? dddw = software?.OpenSubKey("MR", true);RegistryKey? regkey = dddw?.OpenSubKey("测试", true);regkey?.SetValue("value", "abcd");MessageBox.Show("修改成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

3.删除注册表中的信息

        删除注册表中的信息主要通过RegistryKey类中的DeleteSubKey()方法、DeleteSubKeyTree()方法和DeleteValue()方法来实现。

(1)DeleteSubKey()方法

        DeleteSubKey()方法用于删除不包含任何子键的子键。 语法如下:

publie void DeleteSubKey (string subkey,bool throwOnMissingSubKey)
☑ subkey:要删除的子项的名称。
☑ throwOnMissingSubKey:如果值为true,在程序调用时,删除的子键不存在,则产生一个错误信息;如果值为false,在程序调用时,删除的子键不存在,也不产生错误信息,程序依然正确运行。 

        如果删除的项有子级子项,将触发异常。必须将子项删除后,才能删除该项。

// 通过RegistryKey类的DeleteSubKey()方法删除
// HKEY_LOCAL_MACHINE\HARDWARE\MR键下的测试子键
using Microsoft.Win32;namespace _05
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(118, 46),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "删除",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(331, 99);Controls.Add(button1);Name = "Form1";Text = "Form1";}/// <summary>/// 打开"SOFTWARE"子键/// 打开MR子键/// 删除名称为测试的子键/// </summary>private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;RegistryKey? software = hklm?.OpenSubKey("HARDWARE", true);RegistryKey? no1 = software?.OpenSubKey("MR", true);no1?.DeleteSubKey("测试", false);MessageBox.Show("删除成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

(2)DeleteSubKeyTree方法

        DeleteSubKeyTree()方法用于彻底删除指定的子键目录,包括删除该子键以及该子键以下的全部子键。由于此方法的破坏性非常强,所以在使用时要特别谨慎。语法如下:

public void DeleteSubKeyTree(sting subkey)
subkey:要彻底删除的子键名称。 

        当删除的项为null时,则触发异常。

// 通过DeleteSubKeyTree()方法将彻底删除
// HKEY_LOCAL_MACHINE\HARDWARE\MR键下的子键
using Microsoft.Win32;namespace _06
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(151, 12),Name = "button1",Size = new Size(121, 23),TabIndex = 0,Text = "彻底删除子键",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(284, 111);Controls.Add(button1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";}/// <summary>/// 打开"SOFTWARE"子键/// 打开MR子键/// 删除名称为测试的子键/// </summary>private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;//hklm.DeleteSubKey("aaa", false);RegistryKey? software = hklm.OpenSubKey("HARDWARE", true);RegistryKey? no1 = software?.OpenSubKey("MR", true);no1!.DeleteSubKeyTree("测试");MessageBox.Show("删除成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}
}

(3)DeleteValue()方法 

        DeleteValue()方法主要用于删除指定的键值。语法如下:

publie void DeleteValue(string name)
name:要删除的值的名称。
如果在找不到指定值的情况下使用该值,又不想引发异常,可以使用DeleteValue(string name,bool throwOnMissingValue)重载方法。如果throwOnMissingValue参数为true时,将不引发异常。
// 通过DeleteValue方法删除
// HKEY_LOCAL_MACHINE\HARDWARE\MR\测试键下的名称为value的键值
using Microsoft.Win32;namespace _07
{public partial class Form1 : Form{private Button? button1;public Form1(){InitializeComponent();Load += new EventHandler(Form1_Load);}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(132, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 0,Text = "删除键值",UseVisualStyleBackColor = true};button1.Click += new EventHandler(Button1_Click);// // Form1// AutoScaleDimensions = new SizeF(6F, 12F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(219, 196);Controls.Add(button1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "Form1";}/// <summary>/// 打开"SOFTWARE"子键/// 打开MR子键,打开测试子键/// 删除名称为"value"的键值/// </summary>private void Button1_Click(object? sender, EventArgs e){try{RegistryKey? hklm = Registry.LocalMachine;RegistryKey? software = hklm?.OpenSubKey("HARDWARE", true);RegistryKey? no1 = software?.OpenSubKey("MR", true);RegistryKey? no2 = no1?.OpenSubKey("测试", true);no2?.DeleteValue("value");MessageBox.Show("删除键值成功");}catch (Exception ex){MessageBox.Show(ex.Message);}}}    
}

相关文章:

C#注册表技术及操作

目录 一、注册表基础 1.Registry和RegistryKey类 &#xff08;1&#xff09;Registry类 &#xff08;2&#xff09;RegistryKey类 二、在C#中操作注册表 1.读取注册表中的信息 &#xff08;1&#xff09;OpenSubKey()方法 &#xff08;2&#xff09;GetSubKeyNames()…...

js/jQuery常见操作 之各种语法例子(包括jQuery中常见的与索引相关的选择器)

js/jQuery常见操作 之各种语法例子&#xff08;包括jQuery中常见的与索引相关的选择器&#xff09; 1. 操作table常见的1.1 动态给table添加title&#xff08;指定td&#xff09;1.1.1 给td动态添加title&#xff08;含&#xff1a;获取tr的第几个td&#xff09;1.1.2 动态加工…...

C语言数组(下)

我希望各位可以在思考之后去看本期练习&#xff0c;并且在观看之后独立编写一遍&#xff0c;以加深理解&#xff0c;巩固知识点。 练习一&#xff1a;编写代码&#xff0c;演⽰多个字符从两端移动&#xff0c;向中间汇聚 我们依旧先上代码 //编写代码&#xff0c;演⽰多个字…...

pytorch学习5-最大池化层的使用

系列文章目录 pytorch学习1-数据加载以及Tensorboard可视化工具pytorch学习2-Transforms主要方法使用pytorch学习3-torchvisin和Dataloader的使用pytorch学习4-简易卷积实现pytorch学习5-最大池化层的使用pytorch学习6-非线性变换&#xff08;ReLU和sigmoid&#xff09;pytorc…...

在python中安装库,会有conda安装,也会有pip安装,conda与pip的区别是什么?

文章目录 一、Conda是什么&#xff1f;二、pip是什么&#xff1f;三、pip与conda的区别&#xff1a;总结 一、Conda是什么&#xff1f; Conda是一个开源的包管理系统&#xff0c;它是Anaconda公司为Python和其他编程语言开发的。它主要用于数据科学和机器学习领域&#xff0c;…...

算法-贪心思想

贪心的思想非常不好解释&#xff0c;而且越使用权威的语言解释越难懂。而且做题的时候根据自己的理解可能直接做出来&#xff0c;但是非要解释一下怎么使用的贪心的话&#xff0c;就懵圈了。一般来说&#xff0c;贪心的题目没有固定的套路&#xff0c;一题一样&#xff0c;不过…...

STL源码剖析笔记——适配器(adapters)

系列文章目录 STL源码剖析笔记——迭代器 STL源码剖析笔记——vector STL源码剖析笔记——list STL源码剖析笔记——deque、stack&#xff0c;queue STL源码剖析笔记——Binary Heap、priority_queue STL源码剖析笔记——AVL-tree、RB-tree、set、map、mutiset、mutimap STL源…...

Mysql、Oracle区分大小写?

Mysql Windows 系统的文件名不区分大小写&#xff0c;所以运行在 Windows 系统上面的 MySQL 服务器也不用区分数据库名和表名的大小写。Linux 系统大小写规则&#xff1a; 数据库名与表名严格区分大小写表的别名严格区分大小写变量名严格区分大小写列名与列的别名忽略大小写 M…...

Java多线程并发(二)

四种线程池 Java 里面线程池的顶级接口是 Executor&#xff0c;但是严格意义上讲 Executor 并不是一个线程池&#xff0c;而只是一个执行线程的工具。真正的线程池接口是 ExecutorService。 newCachedThreadPool 创建一个可根据需要创建新线程的线程池&#xff0c;但是在以前…...

树莓派外接上显示器以后一直黑屏无画面显示

一般遇到这种情况都是因为没有强制支持热插拔引起的&#xff0c;先断电树莓派&#xff0c;确保显示器与树莓派连接正常&#xff0c;然后上电就可以正常显示了。 如果想要支持热插拔&#xff0c;可以修改配置文件。 sudo nano /boot/config.txt 修改如下配置 hdmi_force_hotpl…...

使用Ansible lineinfile模块进行行级别操作

Ansible是一种功能强大的自动化工具&#xff0c;它提供了各种模块来简化配置管理任务。其中&#xff0c;lineinfile模块是一种特别有用的模块&#xff0c;它允许我们在文件中插入、修改或删除行。本文将介绍Ansible的lineinfile模块&#xff0c;并演示如何使用它来进行行级别操…...

curl 18 HTTP/2 stream

cd /Users/haijunyan/Desktop/CustomKit/KeepThreadAlive/KeepThreadAlive //Podfile所在文件夹 git config --global https.postBuffer 10485760000 git config --global http.postBuffer 10485760000 pod install https://blog.csdn.net/weixin_41872403/article/details/86…...

5G+AI开花结果,助力智慧安检落地

“请带包的乘客过机安检&#xff01;”&#xff0c;深圳地铁、腾讯共同打造的5GAI智慧安检辅助系统亮相福田枢纽站&#xff0c;进一步解放了人力&#xff0c;提高安检效率&#xff0c;为交通安全保驾护航&#xff0c;让智慧出行成为现实。 传统的安检设备均为人工肉眼辨识&…...

Swift 如何实现自定义 Tab Bar

前言 每个 UI 设计师都喜欢美丽而有动画效果的 Tab Bar。然而&#xff0c;对于开发人员来说&#xff0c;实现这种设计可能是一场噩梦。当然&#xff0c;使用 Apple 的原生 Tab Bar 组件并专注于更有趣的事情&#xff0c;比如业务逻辑的实现&#xff0c;会更容易。但如果我们必…...

mysql 语言学习

整理了一下 mysql 操作语言&#xff0c;不是很全&#xff0c;部分地方也许需要修改&#xff0c;先放上来&#xff0c;有时间再慢慢完善。 一、数据库操作 连接数据库 $ sudo mysql [-h ip] -u root -p [-P 3306] 初始化数据库 $ mysql_secure_installation备份数据库 # 备…...

微信小程序基础bug

1.苹果11手机小程序请求数据不显示 设置-》隐私-》分析与改进-》开启 ”与开发者共享“ 2.<navigator>组件回退delta不成功 tabBar 页面是不能实现后退的效果的. 因为, 当我们跳转到 tabBar 页面&#xff0c;会关闭其他所有非tabBar 页面,所以当处于 tabBar 页面时, 无…...

13、pytest为失败的断言定义自己的解释

官方实例 # content of ocnftest.py from test_foocompare import Foodef pytest_assertrepr_compare(op, left, right):if isinstance(left, Foo) and isinstance(right, Foo) and op "":return["Comparing Foo instances:",f" vals:{left.val} !…...

Flink优化——数据倾斜(二)

目录 数据倾斜 判断是否存在数据倾斜 数据倾斜的解决 KeyBy之前发生数据倾斜 KeyBy之后发生的数据倾斜 聚合操作存在数据倾斜 窗口聚合操作存在数据倾斜 数据倾斜 判断是否存在数据倾斜 相同 Task 的多个 Subtask 中&#xff0c;个别 Subtask 接收到的数据量明显大于其…...

Unity打包到Webgl平台以及遇到的问题

Unity打包到Webgl平台以及遇到的问题 参考网站 Unity打包WebGL的全过程及在打包和使用过程中会遇到的问题(本地测试)-CSDN博客 unity打包到Webgl 并配置能正常运行 这里我用的是Unity2022.3.3f1c1版本 有两种方法 1、配置本地web服务 2、安装vsCode>添加插件LiveServe…...

c语言编程题经典100例——(90~95例)

1,写一个函数&#xff0c;实现数字的加密和解密。 下面是一个简单的C语言函数&#xff0c;可以实现数字的加密和解密。这个函数采用简单的加密算法&#xff0c;将输入的数字乘以一个固定的密钥&#xff0c;然后加上一个固定的偏移量。解密过程就是将加密后的数字减去偏移量&am…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要&#xff1a;在消费市场竞争日益激烈的当下&#xff0c;传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序&#xff0c;探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式&#xff0c;分析沉浸式体验的优势与价值…...