如何更改不同用户的注册表项?

How to change registry entries of different users?

我正在开发 C# 桌面应用程序,因此我需要在每个用户的注册表的 HKCU 部分中为每个用户单独存储一些设置。要求是这些设置不能存储在文件中,或者数据库和注册表是最好的解决方案(如果可能的话)。 是否无法使用模拟方法,因为我们可能不知道所有用户的密码。但是,当 运行 exe.

时,我们将拥有管理员权限

有没有一种方法可以让我们通过管理员访问权限访问每个用户的 HKCU 部分并在那里填充设置

根据你的场景,第一个方案是模拟用户,但你不愿意采用,现在我们有另一个方案,获取用户的SID,然后将数据写入KEY_USERS registry 因为这个路径包含机器中的所有用户。

以下是将值写入特定用户注册表项的实用函数,显然您需要知道 his/her 用户名。

public static bool AddUserData(string userName, string key, string value)
{
   try
   {
        //Gets the SID of the desired user
        NTAccount f = new NTAccount(userName);
        SecurityIdentifier s = (SecurityIdentifier)f.Translate(typeof(SecurityIdentifier));
        string sid = s.ToString();

        //Define the path to the subkey
        string path = @"SOFTWARE\Console\DefaultConfig";

        //try to open the path
        var reg = Registry.Users.OpenSubKey(string.Format("{0}\{1}", sid, path), true);
        if (reg == null)
        {
            //if not exists create that path for that user
            reg = Registry.Users.CreateSubKey(string.Format("{0}\{1}", sid, path));
        }

        //set value against key
        reg.SetValue(key, value);
        return true;
    }
   catch
   {
       return false;
   }
}

随时查看 Registry class 的文档,以便您更好地学习读取值,这只是您的开始方向,而且我还没有测试代码但是我很确定这会对你有很大帮助。该程序的管理员访问权限是此代码工作的必要条件,否则您将被假冒。