服务程序C#编写系统服务,注册表读写问题

关于C#下面windows服务读取注册表的问题 留着以后作备忘 阅读详情

默认情况下,服务与已登录的用户在不同的安全上下文中运行。服务在称为 LocalSystem 的默认系统帐户的上下文中运行,该帐户给服务提供的系统资源访问特权不同于给用户提供的。
     所以服务程序访问注册表的CurrentUser时并不是你当前登陆账号下的CurrentUser,所以在你当前陆账号下的CurrentUser下建立的键值,服务程序根本无法访问到,给人的错觉就是服务程序无法读写注册表,其实不然,只是它读写的地方不是你想要它读写的地方。
    解决的办法有两个,一个是在服务管理器理,双击你的服务,在登录标签里修改服务的登录帐号为你当前的登录帐号,重启服务。
   第二个方法就是,采用注册表里的公共部分,如loacl machine,只要与登录帐号无关的键就可以。

 private void button3_Click(object sender, EventArgs e)
        {
                       RegistryKey regRead;
            //读取HKEY_CURRENT_USER主键里的Software子键下名为“Test”的子键
           // regRead = Registry.CurrentUser.OpenSubKey("SOFTWARE//JavaSoft//Prefs", true);
          //  regRead = Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE//HARDWARE//JavaSoft//Prefs", true);
            regRead = Registry.LocalMachine.OpenSubKey("HARDWARE//JavaSoft//Prefs", true);
           
            if (regRead == null) //如果该子键不存在
            {
                MessageBox.Show("No Data!");
            }
            else
            {
                object dbname = regRead.GetValue("dbname");  //读取“Name”项的值
                listBox1.Items.Add(dbname.ToString());
                object password = regRead.GetValue("password");  //读取“Name”项的值
                listBox1.Items.Add(password.ToString());
                object skyip = regRead.GetValue("skyip");  //读取“Name”项的值
                listBox1.Items.Add(skyip.ToString());
                object skyport = regRead.GetValue("skyport");  //读取“Name”项的值
                listBox1.Items.Add(skyport.ToString());
                object user = regRead.GetValue("user");  //读取“Name”项的值
                listBox1.Items.Add(user.ToString());
              
            }
            //关闭该对象
            regRead.Close();

 

        }

 

Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键
  Registry.CurrentUser 对应于HKEY_CURRENT_USER主键
  Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键
  Registry.User 对应于 HKEY_USER主键
  Registry.CurrentConfig 对应于HEKY_CURRENT_CONFIG主键
  Registry.DynDa 对应于HKEY_DYN_DATA主键
  Registry.PerformanceData 对应于HKEY_PERFORMANCE_DATA主键

RegistryKey类封装了对注册表的基本操作,包括读取,写入,删除。其中读取的主要函数有:

OpenSubKey ( string name )方法主要是打开指定的子键。
  GetSubKeyNames ( )方法是获得主键下面的所有子键的名称,它的返回值是一个字符串数组。
  GetValueNames ( )方法是获得当前子键中的所有的键名称,它的返回值也是一个字符串数组。
  GetValue ( string name )方法是指定键的键值。

写入的函数有:

CreateSubKey(string name)方法是增加一个子键

SetValue(string name,string value)方法是设置一个键的键值



删除的函数:

DeleteSubKey ( )方法:删除一个指定的子键。

DeleteSubKeyTree ( )方法:

此方法是彻底删除指定的子键目录,即:删除该子键以及该子键以下的全部子键。
1.IE窗口的动感效果

//-------------------------------------

//  ChangeIE.cs ? 2004 by yudehui

//-------------------------------------

using System;

using Microsoft.Win32;  //对注册表操作一定要引用这个命名空间

namespace ChangeIE

{

    class ChangeIE

    {     

        [STAThread]

        static void Main(string[] args)

        {

          RegistryKey pregkey ;

            pregkey = Registry.CurrentUser.OpenSubKey("Control Panel//Desktop//WindowMetrics",true);

            if (pregkey==null)

            {

                Console.WriteLine("键值不存在");

            }

            else

            {

                pregkey.SetValue("MinAnimate","1");

                pregkey.SetValue("MaxAnimate","1");

                Console.WriteLine("修改成功");



            }

            pregkey. Close;

        }

    }

}

2.改变IE工具栏的背景

//-------------------------------------

//  ChangeIE.cs ? 2004 by yudehui

//-------------------------------------

using System;

using Microsoft.Win32;  //对注册表操作一定要引用这个命名空间

namespace ChangeIEbackColor

{

    class ChangeIEbackColor

    {     

        [STAThread]

        static void Main(string[] args)

        {

          RegistryKey pregkey ;

pregkey = Registry.CurrentUser.OpenSubKey("Software//Microsoft//Internet" +

                                          "Explorer//Toolbar//Explorer ",true);

            if (pregkey==null)

            {

                Console.WriteLine("键值不存在");

            }

            else

            {

                pregkey.SetValue("BackBitmap","C://windows//Greenstone.bmp");

                Console.WriteLine("修改成功");



            }

            pregkey.Close;

        }

    }

}
以下从‘读’‘写’‘删除’‘判断’四个事例实现对注册表的简单操作
1.读取指定名称的注册表的值
private string GetRegistData(string name)
{
  string registData;
  RegistryKey hkml = Registry.LocalMachine;
  RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
  RegistryKey aimdir = software.OpenSubKey("XXX",true);
  registData = aimdir.GetValue(name).ToString();
  return registData;
}
以上是读取的注册表中HKEY_LOCAL_MACHINE/SOFTWARE目录下的XXX目录中名称为name的注册表值;

2.向注册表中写数据
private void WTRegedit(string name,string tovalue)
{
  RegistryKey hklm = Registry.LocalMachine;
  RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
  RegistryKey aimdir = software.CreateSubKey("XXX");
  aimdir.SetValue(name,tovalue);
}
以上是在注册表中HKEY_LOCAL_MACHINE/SOFTWARE目录下新建XXX目录并在此目录下创建名称为name值为tovalue的注册表项;

3.删除注册表中指定的注册表项
private void DeleteRegist(string name)
{
  string[] aimnames;
  RegistryKey hkml = Registry.LocalMachine;
  RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
  RegistryKey aimdir = software.OpenSubKey("XXX",true);
  aimnames = aimdir.GetSubKeyNames();
  foreach(string aimKey in aimnames)
  {
    if(aimKey == name)
    aimdir.DeleteSubKeyTree(name);
  }
}
以上是在注册表中HKEY_LOCAL_MACHINE/SOFTWARE目录下XXX目录中删除名称为name注册表项;

4.判断指定注册表项是否存在
private bool IsRegeditExit(string name)
{
  bool _exit = false;
  string[] subkeyNames;
  RegistryKey hkml = Registry.LocalMachine;
  RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
  RegistryKey aimdir = software.OpenSubKey("XXX",true);
  subkeyNames = aimdir.GetSubKeyNames();
  foreach(string keyName in subkeyNames)
  {
    if(keyName == name)
    {
      _exit = true;
      return _exit;
    }
  }
  return _exit;
}
以上是在注册表中HKEY_LOCAL_MACHINE/SOFTWARE目录下XXX目录中判断名称为name注册表项是否存
在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断;

C# 读写注册表 在C#中,读写注册表通常通过命名空间下的Registry和类来实现。这些类提供了对Windows注册表的访问权限。 阅读详情

相关推荐

解决C#操作注册表权限不够的问题

在Win7中,系统安全系数已经很高了,因此.NET4.0中对于注册表操作这种高级权限的东西也限制的比较紧,因此,在编程中经常会发现,使用RegistryKey类进行操作时的各种失效或者各种报错。 如何解决这问题呢? 首先,因为要操作注册表,所以,需要程序以管理员身份运行。在Win7系统中的表现即为运行程序时,弹出用户帐户控制对话框,申请以管理员身份运行。 在项目中新建一个后缀

筑梦★逐梦 8280

C# 操作注册表

///         /// 创建注册表,并修改注册表信息,修改后打开注册表编辑器,并且定位到指定项         ///         ///         ///         private void button1_Click(object sender, EventArgs e)         {             RegistryKey rklm

mawenxu的专栏 4278

【C#_注册表操作】

注册表在软件开发中可以存储一些关键信息,这样就不会轻易被删除的,作用比较多,比如可以用它来做授权相关事宜等.

胡说八道,欢迎来此交流霸道心得 1329

注册表操作

一、判断指定键值是不囓 RegistryKey netOpen = Registry.CurrentUser.OpenSubKey("Net");             if (netOpen == null)

ZBJ2001的专栏 604

Windows服务与注册表操作实战指南

Windows注册表是一个分级的数据库系统,它存储了关于计算机的配置信息,包括硬件配置、用户偏好设置、系统安全设置和安装的软件等信息。注册表由一系列根键组成,每个根键下有多个子键,这些子键又可以包含进一步的子键以及最终的值项。根键是注册表数据库中的主要分支,每个根键都代表了系统中的一个特定类型的信息。在Windows中,有五个根键,分别是::包含了文件类型关联和OLE对象类信息。:包含了当前登录用户的用户配置文件。

weixin_35019679的博客 845

C#中注册表写入与读取操作详解

在Windows平台上,命名空间提供了用于访问和操作注册表的API。它通过封装Windows API中的Registry类和RegistryKey类,使得C#程序员可以更容易地对系统注册表进行编程操作。命名空间不仅包括了操作注册表的高级封装,还提供了管理注册表键和值的直接方法。使用这些类,我们可以完成如下操作:打开、创建、修改和删除注册表项和子项读取、写入和删除注册表项的值对注册表项和子项进行枚举操作。

weixin_36444661的博客 1257

CurrentUser获取不到当前登录用户name

获取name时为空 只需要在****.Domain/IdentityServer/IdentityServerDataSeedContributor.cs 添加如下 using Volo.Abp.Security.Claims;

你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题 1574

【python】geopandas库安装出现各种问题?可以看看这篇文章

geopandas的安装方法

jgsecurity的博客 3888

System.NullReferenceException:“未将对象引用设置到对象的实例。”----C#操作注册表

编写如下代码 RegistryKey retkey = Registry.CurrentUser.OpenSubKey("BPAE_DCCB_Key", true).CreateSubKey("register"); 若注册表中无 BPAE_DCCB_Key则报“System.NullReferenceException:“未将对象引用设置到对象的实例。”” 原因为以下代码返回为 NULL,导致NULL.CreateSubKey("register") 于是报异常 Regi...

gzc0319的博客 7854

无人驾驶--车道线检测实战(附源码)

做完项目后写了个技术小结,供自己回顾也为他人学习提供参考。 另外准备建一个无人驾驶方面的微信交流群,有兴趣的朋友可以加我微信:wxl609278502 请注明: 姓名-单位/学校 项目描述: 使用opencv实时处理车载摄像机采集的道路图像,检测当前的车道,并计算出当前车辆偏离车道中心的距离,计算当前车道的曲率。 项目代码GitHub地址:https://g...

weixin_38746685的博客 6万+

使用示波器通过串口抓取数据波形

当我们在软件上发送一个数据,需要在示波器上正确的显示发送数据的波形时,这个过程是需要按照软件上串口配置的参数对示波器进行调节的,本次使用的示波器(型号为RIGOL DS1102Z-E)外观如下图所示,本次对采集波形的调节主要用到以下几处按钮。具体是两条导线T+连接R+、T-连接R-,连接完毕后,打开XCOM软件,首先配置好参数后打开串口,如下所示,若在发送窗口发送数据在接收窗口可以实时显示到的话,证明串口的收发功能是正常的。1.CH1、CH2是示波器上的两个采集通道,本次波形采集使用的是CH1通道。

weixin_58061628的博客 1万+

C#读写注册表

自Windows95以来的所有Windows版本中,注册表是包含Windows安装,用户首选项,以及已安装软件和设备的所有配置信息的核心存储库。目前,几乎所有的商用软件都使用注册表来存储这些信息,COM组件必须把它们的信息存储在注册表中,才能有客户端调用。.NET Framework引入了独立存储器的概念,通过它应用程序可以在文件中存储专用于每个用户的信息,.NET Framework将确保为每个在

小猪快跑 1万+

从Protocol到硬件控制:揭秘高通UEFI中ABL与XBL的协作机制

本文深入解析了高通UEFI架构中ABL与XBL的协作机制,重点探讨了Protocol通信在硬件控制中的关键作用。通过对比传统GPIO控制方式,揭示了Protocol架构在安全性、可维护性和灵活性方面的优势,并提供了关机充电场景的实战案例分析及调试技巧。

weixin_29185199的博客 431

C#读写注册表及 "WOW6432Node" 问题

C# 读写注册表技术很成熟,示例代码如下: // Create & Write string regpath = @"Software\MySoft\Soft1"; RegistryKey key = Registry.LocalMachine.CreateSubKey(regpath); key.SetValue("InstallDirectory", @"C:\Data", Regi...

郝伟老师的博客——大数据、并行计算与人工智能时代 4839

CAN基础知识

CAN基础知识

shouchen1的博客 9149

超螺旋滑模控制(STA)

超螺旋滑模控制又称超扭滑模控制,可以说是二阶系统中最好用的滑模控制方法。

Lyajpunov的博客 1万+

如何在C#中读写注册表

注册表是视窗系统的一个核心的数据库,在这个数据库中存放中与系统相关的各种参数,这些参数直接控制中系统的启动、硬件的驱动程序安装信息 以及在视窗系统上运行的各种应用程序的注册信息等。这就意味着,如果注册表因为某些原因受到了破坏,轻者是视窗系统启动过程出现异常,重者就有 可能导致整个系统的完全瘫痪。所以正确的认识注册表,及时的备份注册表,对于视窗用户就显得相当重要。   C#就可以十分方便、简洁

onejune的博客 2426

数字锁相环的原理与FPGA实现

数字锁相环是锁相环电路的全数字实现。锁相环电路能够实现对输入信号的相位进行跟踪,进而在噪声中提取纯净的有用信号。以上就是今天要讲的内容,本文简单地介绍了锁相环的原理,然后,在Vivado仿真平台上,通过verilog做仿真验证。最终仿真结果能够实现锁定,但锁定时间较长,表明参数仍可做调整。

weixin_45857378的博客 8510

c# 读写注册表

c# 简单读写注册表 1 /// <summary> 2 /// 注册表 3 /// </summary> 4 public class Regedit 5 { 6 private const string SUB_KEY = "SOFTWARE"; 7 private static readonly RegistryKey ...

weixin_34342905的博客 379

C#开发的OpenRA游戏之网络接收后找到游戏对象

而这个队列是在创建这个游戏对象时组件,因为一个游戏对象有很多特性,当发现创建游戏对象时有IResolveOrder继承接口的对象,就添加到这个数组。在这里先检查一下命令是否有效的,接着就调用命令的执行对象,即是游戏对象来执行这个命令了。order.Subject就是上面解释游戏对象ID,并从游戏世界里找到的游戏对象,再从各个字段里找到对应的信息,再把这个动作交给游戏世界里的对象执行。从前面分析可知,要找到游戏世界里的对象,就需要游戏对象的ID,因此, 我们来分析游戏对象的ResolveOrder函数。

大坡3D软件开发 1034

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C#注册表技术及操作

注册表是一个庞大的数据库系统,它记录了用户安装在计算机上的软件、硬件信息和每一个程序的相互关系。注册表中存放着很多参数,直接控制着整个系统的启动、硬件驱动程序的装载以及应用程序的运行。由于Windows 10系统本身的安全性问题,使用C#操作注册表时,可能会提示无法操作相应的注册表项,这时只需要为提示的注册表项添加everyone用户的读写权限即可。一、注册表基础Windows注册表包含Windows安装、用户喜好以及已安装软件和设备的所有配置信息的核心存储库。1.Registry和类。

wenchm的博客 4156

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# 注册表的读写-V1.0

本文介绍了在WinForm项目中通过读写Windows注册表实现窗体位置记忆功能的方法。通过Registry和RegistryKey类,在窗体关闭时将坐标(X,Y)保存到HKEY_CURRENT_USER\Software\Mysoft子项中,下次启动时读取该位置信息恢复窗体显示位置。关键操作包括:使用Registry.CurrentUser获取当前用户注册表项,CreateSubKey创建子项,SetValue/GetValue实现键值读写。文章还简要说明了注册表的基本结构(根键、子项、键值)和常见数据类

yue008的博客 412

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Windous注册表+c#操作

将会分享Windous注册表的基础知识及C# 读写注册表的方法。

Byronloong 的博客 1247
上一篇: 数据导出excel 使用将 DataTable导出为excel
下一篇: 卸载我用的是Oracle 10G是因为自己遇到了这个麻烦所以才把这个发到网上来与大家分享希望能给大家带来一点方便!
2004v2004
博客等级 码龄23年 71粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值