diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/RegistryInterop.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/RegistryInterop.cs
index fa7c7095..97bbd4d5 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/RegistryInterop.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/RegistryInterop.cs
@@ -6,6 +6,7 @@ using Snap.Hutao.Core.ExceptionService;
using Snap.Hutao.Model.Entity;
using System.Diagnostics;
using System.IO;
+using System.Runtime.InteropServices;
using System.Text;
namespace Snap.Hutao.Service.Game;
@@ -31,8 +32,14 @@ internal static class RegistryInterop
{
if (account is not null)
{
- string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(account.MihoyoSDK));
- string path = $"HKCU:{GenshinKey[@"HKEY_CURRENT_USER\".Length..]}";
+ // 存回注册表的字节需要 '\0' 结尾
+ Encoding.UTF8.GetByteCount(account.MihoyoSDK);
+ byte[] tempBytes = Encoding.UTF8.GetBytes(account.MihoyoSDK);
+ byte[] target = new byte[tempBytes.Length + 1];
+ tempBytes.CopyTo(target, 0);
+
+ string base64 = Convert.ToBase64String(target);
+ string path = $"HKCU:{GenshinPath}";
string command = $"""
$value = [Convert]::FromBase64String('{base64}');
Set-ItemProperty -Path '{path}' -Name '{SdkChineseKey}' -Value $value -Force;
@@ -68,13 +75,18 @@ internal static class RegistryInterop
/// 在注册表中获取账号信息
///
/// 当前注册表中的信息
- public static string? Get()
+ public static unsafe string? Get()
{
object? sdk = Registry.GetValue(GenshinKey, SdkChineseKey, Array.Empty());
if (sdk is byte[] bytes)
{
- return Encoding.UTF8.GetString(bytes);
+ fixed (byte* pByte = bytes)
+ {
+ // 从注册表获取的字节数组带有 '\0' 结尾,需要舍去
+ ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpanFromNullTerminated(pByte);
+ return Encoding.UTF8.GetString(span);
+ }
}
return null;