无法在 c# 中编辑注册表?

  • 本文关键字:编辑 注册表 c#
  • 更新时间 :
  • 英文 :


我有用于使用 C# 设置 Windows10 自动登录的代码, 这段代码是很久以前写的,我希望它当时能工作。

但是当我现在测试它时,它无法在注册表中设置键值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace engage.client.setup
{
using Microsoft.Win32;
using System;
using System.DirectoryServices;
public class AutoLogin
{
public static void AutoLoginUser()
{
try
{
DirectoryEntry AD = new DirectoryEntry("WinNT://" +
Environment.MachineName + ",computer");
DirectoryEntry NewUser = AD.Children.Add("EngageUser", "user");
NewUser.Invoke("SetPassword", new object[] { "engage" });
NewUser.Invoke("Put", new object[] { "Description", "EngageUser" });
NewUser.CommitChanges();
DirectoryEntry grp;
grp = AD.Children.Find("Administrators", "group");
if (grp != null) { grp.Invoke("Add", new object[] { NewUser.Path.ToString() }); }
Console.WriteLine("Account Created Successfully...");
RemoveDefaultLogin();
WriteDefaultLogin("EngageUser", "engage");
Console.WriteLine("please restart your system");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("error"+ex.Message);
Console.ReadLine();
}
}
public static void WriteDefaultLogin(string usr, string pwd)
{
Console.WriteLine("Setting autologin...");
RegistryKey rekey = Registry.LocalMachine.CreateSubKey
("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon");
Console.WriteLine("before setting:" + rekey.GetValue("AutoAdminLogon")+ rekey.GetValue("DefaultUserName") + rekey.GetValue("DefaultPassword"));

if (rekey == null)
Console.WriteLine
("There has been an error while trying to write to windows registry");
else
{
rekey.SetValue("mytestingkey", "worked");
rekey.SetValue("AutoAdminLogon", "1");
// Console.WriteLine("set:autoadminlogon:1"+"/n  reg set vlaue:"+rekey.GetValue("AutoAdminLogon"));
rekey.SetValue("DefaultUserName", usr);
// Console.WriteLine("set:username"+usr+ "/n  reg set vlaue:" + rekey.GetValue("DefaultUserName"));
rekey.SetValue("DefaultPassword", pwd);
// Console.WriteLine("set:password"+ pwd+"/n reg set vlaue :" + rekey.GetValue("DefaultPassword"));
}
Console.WriteLine("after setting" + rekey.GetValue("AutoAdminLogon") + rekey.GetValue("DefaultUserName") + rekey.GetValue("DefaultPassword"));
rekey.Flush();
rekey.Close();
}
public static void RemoveDefaultLogin()
{
RegistryKey rekey = Registry.LocalMachine.CreateSubKey
("SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon");
if (rekey == null)
Console.WriteLine("Registry write error");
else
{
rekey.DeleteValue("DefaultUserName", false);
rekey.DeleteValue("DefaultPassword", false);
rekey.DeleteValue("AutoAdminLogon", false);
}
rekey.Close();
}
}
}

为什么即使 getValue 方法显示更新的值,我也无法更改密钥,在注册表中它没有更新。

除非程序以管理员身份运行,否则无法更新Registry.LocalMachine条目。您需要向程序添加清单,并使其需要管理员权限才能启动。

也可能有一个 32 位程序尝试访问 64 位注册表密钥。将Registry.LocalMachine替换为Registry.LocalMachine(RegistryHive.LocalMachine, RegistryView.Registry64)以强制它使用 64 位注册表,即使你的应用以 32 位运行也是如此。

您还可以将程序编译为 64 位而不是 32 位或 AnyCPU 以强制其为 64 位。

最新更新