gpt4 book ai didi

c# - 授予注册表权限

转载 作者:可可西里 更新时间:2023-11-01 10:21:27 31 4
gpt4 key购买 nike

我授予 NETWORK SERVICE 访问注册表项的权限,我需要通过我作为 NETWORK SERVICE 运行的控制台应用程序访问该注册表项。以下是我如何创建 key 和授予权限。

Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE", RegistryKeyPermissionCheck.ReadWriteSubTree);
RegistrySecurity rs = new RegistrySecurity();
rs = key.GetAccessControl();
rs.AddAccessRule(new RegistryAccessRule("NETWORK SERVICE", RegistryRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
key.SetAccessControl(rs);
key = key.CreateSubKey("RM", RegistryKeyPermissionCheck.ReadWriteSubTree);
key = key.CreateSubKey("CSVExtraction", RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("Failure Tally", "0");

但是,当我尝试使用以下代码将 setValue 设置为键时,出现错误。下面给出了我用来设置值的代码。

Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
key = key.CreateSubKey("RM", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
key = key.CreateSubKey("CSVExtraction", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);
key.SetValue("Failure Tally, "1");

但在这里我收到一条错误消息,提示对 HKLM/本地机器/软件的访问被拒绝。但是我已经使用上面的代码添加了访问规则。但是当我去手动检查访问时,访问被添加到 WOW6432 节点。

最佳答案

这个问题可以通过做2处修改来解决1)授予权限时您的代码:rs.AddAccessRule(new RegistryAccessRule("NETWORK SERVICE", RegistryRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow)); key.SetAccessControl(rs);

编辑为:

rs.AddAccessRule(new RegistryAccessRule("NETWORK SERVICE", RegistryRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
key.SetAccessControl(rs);

这样做是为了确保您给予的许可是 inge=herited 到子树。

2) 您不需要逐个 key 地打开 key ,而是可以通过写入来访问您想要的 key

string registryFolderStructure =@"SOFTWARE\RM\CSVExtraction";
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(registryFolderStructure, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);

关于c# - 授予注册表权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28040832/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com