c# - C# Reg_Binary 和 BATCH
问题描述
我是 BATCH 的粉丝,我正在尝试使用 C# winForms 而不是批处理来实现我的密钥。
我做了一个简单的批处理脚本:
@echo off
reg add "HKEY_CURRENT_USER\Software\TestProgram\Kool" /f /v "Setting" /t REG_BINARY /d h4h999d27e93f3666188231a018c9d44406136wb 1>nul 2>&1
这更新了我的 reg 密钥,不用担心。但是我想尝试用 C# WinForms 实现相同的结果,我相信我有正确的公式,但结果不正确。
我尝试了以下方法(先检查 reg_binary 是否存在并先删除它):
private void button1_Click(object sender, EventArgs e)
{
if (Registry.GetValue(@"HKEY_CURRENT_USER\Software\TestProgram\Kool", "Setting", null) == null)
{
RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\TestProgram\Kool");
try
{
var data = Encoding.Unicode.GetBytes("h4h999d27e93f3666188231a018c9d44406136wb");
//Storing the values
key.SetValue("Setting", data, RegistryValueKind.Binary);
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
MessageBox.Show(exc.StackTrace);
}
key.Close();
MessageBox.Show("binary key created");
}
else
{
MessageBox.Show("error");
}
}
这使得密钥不用担心,但它的格式或结果与我通过批处理时得到的不同,有人可以向我解释为什么吗?我追求的结果与我使用批处理文件时的结果相同。
我觉得我错过了一些简单的东西,也许它的字节不正确,我似乎无法解决。
我已阅读这些以寻求帮助: 将 Stringformated Hex Block 以二进制值写入注册表 如何从注册表中检索 REG_BINARY 值并转换为字符串 如何将二进制数据从注册表读取到字节数组 读取 Registry_binary 并转换为字符串
但仍然没有成功。
解决方案
要创建二进制密钥,您需要传递一个byte[]
. 所以你应该首先将十六进制字符串转换为字节数组,然后添加值。
例如:
var path = @"Software\TestProgram\Kool";
var key = Registry.CurrentUser.OpenSubKey(path, true);
if (key == null)
key = Registry.CurrentUser.CreateSubKey(path, true);
var hex = "d5d000d27e93f3116100224a018c9d00406136c3";
var value = StringToByteArray(hex);
key.SetValue("Setting", value, RegistryValueKind.Binary);
我使用StringToByteArray
了 JaredPar 在这篇文章中分享的方法:
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
推荐阅读
- r - 有没有办法将饼图的标准颜色替换为图片?
- azure - PowerBi:流数据加密(REST API)
- javascript - jquery-ui 在图像地图上可拖动导致 android 上 Firefox 中可点击区域的问题
- c++ - 为什么我的 long long int 算术会以这种方式表现?
- python - 我在 Pandas 的 Dataframe 中添加了一行 3 次。但是,只添加了最后一行
- regex - 正则表达式查找重复阶段
- ios - Info.plist 文件中缺少目的字符串
- reactjs - React重定向导致错误:超过最大更新深度
- android - 向arrayList添加多行
- php - 如何在谷歌云服务器或 AWS 上运行 php websoket 服务器文件(server.php)