C# 使用c代码在windows 7中读取/写入注册表

C# 使用c代码在windows 7中读取/写入注册表,c#,windows,permissions,registry,C#,Windows,Permissions,Registry,我有一个windows C#应用程序,当用户运行它时,我想将当前时间保存为某个注册表中的登录时间,当用户关闭它时,我想将其保存为注销时间,它给了我请求的注册表访问权限是不允许的异常。我已尝试授予该注册表的权限,但仍然得到该异常。以下是我尝试的代码 RegistrySecurity rs = new RegistrySecurity(); string currentUserStr = Environment.UserDomainName + "\\" + Environment.UserName

我有一个windows C#应用程序,当用户运行它时,我想将当前时间保存为某个注册表中的登录时间,当用户关闭它时,我想将其保存为注销时间,它给了我请求的注册表访问权限是不允许的异常。我已尝试授予该注册表的权限,但仍然得到该异常。以下是我尝试的代码

RegistrySecurity rs = new RegistrySecurity();
string currentUserStr = Environment.UserDomainName + "\\" + Environment.UserName;
rs.AddAccessRule(new RegistryAccessRule(currentUserStr, RegistryRights.WriteKey | RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.FullControl, AccessControlType.Allow));                
RegistryKey Rkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SYSTEM", true).OpenSubKey("Test", true);
Rkey.SetAccessControl(rs);
我还尝试使用app.manifest强制应用程序每次都以管理员的身份运行,但我想保留最后一个选项。
那么有没有其他解决方案来读/写注册表???

IMO,您的应用程序需要以相关权限运行。尝试以管理员身份运行Visual Studio。

我只是在我的计算机(windows 7 64位)上以
窗口形式运行代码。我没有任何问题(我甚至可以删除
AddAccessRule
行)

所以问题不在于代码本身。您是否尝试在运行代码时使用同一用户手动更改
注册表中的值?您从哪个位置(硬盘、网络驱动器或internet…)运行代码?我知道从网络驱动器运行可能会出现问题,请告诉我,也许我可以帮助您进一步

访问HKLM(这就是您正在做的)需要管理权限

@Hitesh:你需要将MANIFESTUAC设置为“requireAdministrator”

在Visual Studio中,这是在:项目属性->链接器->清单文件和集合中完成的:

  • 启用UAC是
  • UAC执行级别-requireAdministrator
  • UAC旁路用户界面-否

p.S.自从Windows Vista之后,UAC就出现了…

我想在用户系统上运行应用程序,安装后没有visual studio thereYa,我手动更改了注册表值。我只在同一台机器上运行代码(不涉及网络驱动器或internet)。我仍然无法读取/写入注册表值。您是否查看了MS支持文档中提供的解决方案?但是如何通过c#授予这些权限??