如何更改不同用户的注册表项?
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 的文档,以便您更好地学习读取值,这只是您的开始方向,而且我还没有测试代码但是我很确定这会对你有很大帮助。该程序的管理员访问权限是此代码工作的必要条件,否则您将被假冒。
我正在开发 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 的文档,以便您更好地学习读取值,这只是您的开始方向,而且我还没有测试代码但是我很确定这会对你有很大帮助。该程序的管理员访问权限是此代码工作的必要条件,否则您将被假冒。