c# - 使用 C# 将值写入注册表

标签 c# windows-services registry

我正在创建一个 C# 应用程序,它将监视对注册表所做的更改,并在用户下次登录时将它们写回注册表。

到目前为止,我已经掌握了监控更改、报告更改、将配置单元、键和值写入文本文件的功能。我现在需要从文件中取出它们的值并将它们放回注册表中。现在我看了各种教程,但没有人能够回答我的问题/问题,所以例如我想更改的注册表项是:

hkey_users\s-1-5-21-2055990625-1247778217-514451997-41655\software\software\Microsoft\Microsoft\Microsoft\Windows NT\Currentversion\CurrentVersion\Current Versem\Windows Messaging Subsation\profiles\profiles\profiles\eutlook\010000000000000000000000000000000000000000000000000000000000000000000000来/p>

我希望能够做的是回写并适本地更改值。我目前有 3 个字符串,一个包含键位置,一个包含值,最后一个是值的内容,尽管我可以轻松更改字符串操作以获取和不获取我需要或不需要的任何内容。因此,如果有人可以为我提供一种写入方式,我们将不胜感激。

P.S 所以你知道,那个特定值是一个二进制值,我将其转换为字符串进行存储。如果您需要任何进一步的信息,请告诉我。

任何帮助将不胜感激......谢谢

编辑我目前使用的代码:

public class reg
{
    public void write(string key, string valueName, string value)
    {
        Byte[] byteValue = System.Text.Encoding.UTF8.GetBytes(value);

        Registry.SetValue(key, valueName, value, RegistryValueKind.Binary);
    }
}

最佳答案

我猜您只需要找到合适的类来写入注册表即可。使用此类使其相对简单。这就是您要找的全部吗?

string key = @"HKEY_CLASSES_ROOT\.sgdk2";
string valueName = string.Empty; // "(Default)" value
string value = "sgdk2file";

Microsoft.Win32.Registry.SetValue(key,valueName, value,
   Microsoft.Win32.RegistryValueKind.String);

将十六进制字符串转换为二进制数据:

static byte[] HexToBin(string hex)
{
   var result = new byte[hex.Length/2];
   for (int i = 0; i < hex.Length; i += 2)
   {
      result[i / 2] = byte.Parse(hex.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
   }
   return result;
}

如果你需要再次将这些字节看成十六进制,你可以使用这样的代码:

static string BytesToHex(byte[] bytes)
{
   System.Text.StringBuilder sb = new StringBuilder();
   for (int i = 0; i < bytes.Length; i++)
   {
      sb.Append(bytes[i].ToString("x2"));
   }
   return sb.ToString();
}

如这段代码所示,表示为十六进制 0e、ff 和 10 的字节分别转换为二进制 00001110、11111111 和 00010000。

static void Main(string[] args)
{
   byte[] bytes = HexToBin("0eff10");
   Console.WriteLine(BytesToBinaryString(bytes));
}

static byte[] HexToBin(string hex)
{
   var result = new byte[hex.Length / 2];
   for (int i = 0; i < hex.Length; i += 2)
   {
      result[i / 2] = byte.Parse(hex.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
   }
   return result;
}

static string BytesToBinaryString(byte[] bytes)
{
   var ba = new System.Collections.BitArray(bytes);
   System.Text.StringBuilder sb = new StringBuilder();
   for (int i = 0; i < ba.Length; i++)
   {
      int byteStart = (i / 8) * 8;
      int bit = 7 - i % 8;
      sb.Append(ba[byteStart + bit] ? '1' : '0');
      if (i % 8 == 7)
         sb.Append(' ');
   }
   return sb.ToString();
}

关于c# - 使用 C# 将值写入注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660870/

相关文章:

excel - 如何通过注册表启用 Excel 自动化插件?

c# - 验证请求内容类型

c# - 动态获取方法/参数 xml 注释

windows - 对 LocalSystem 和 LocalService 帐户感到困惑

c# - 使用 WCF 的 Windows 服务

c# - 停止服务

powershell - 使用 Powershell 删除不存在的网络适配器

c# - 如何在 Windows 启动时运行 C# 应用程序?

c# - 使用 LINQ 进行快速排序

c# - 如何实现一个通用的抽象函数?