我希望我的程序能够编辑驻留在“HKEY_LOCAL_MACHINE”中的注册表项中的值
My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\XYZ", "MyValue", "MyData")
以上在Windows XP中运行良好,但在Vista中引发了UnauthorizedAccessException。
答案 0 :(得分:8)
您正在使用Vista的UAC功能。它不会让您写入HKLM配置单元中的任意位置,因为您没有使用管理权限运行。
有两种方法可以解决此问题
第二个选项要好得多,因为它允许您的应用程序使用非管理员权限运行,而您无法始终认为您的用户具有此权限。
这是一篇关于UAC的相当详细的文章。它不是100%的编程材料,但它可以很好地解释它到底是什么,并且您可以将它与您的特定程序联系起来:http://technet.microsoft.com/en-us/library/cc709691.aspx
答案 1 :(得分:2)
由于对本地计算机配置单元的更改可能会影响整个系统,因此您会发现对其的更改仅限于非管理用户。如果您尝试在XP计算机上运行相同的代码非管理员帐户,您将收到相同的错误。在Vista上,因为默认情况下该进程是非管理员,您将收到此错误。有关这方面的信息,请参阅“Made for Windows 2000”,“Made for Windows XP”和“Made for Windows Vista”认证指南。
鉴于我几乎没有关于您的计划正在做什么的信息,可能需要更多信息来为您提供具体指导,因此我将在一般情况下发言。除非您需要,否则您希望应用程序单独离开本地计算机配置单元。当您的程序以非管理员模式运行时,您可以禁用需要访问这些管理员密钥的功能,也可以请求admin privs。
答案 2 :(得分:-1)
Vista对管理员帐户的限制更严格。如果您未以管理员帐户登录,则必须写入HKEY_CURRENT_USER而不是HKEY_LOCAL_MACHINE。
IMO,这更有意义。每个用户都有自己的程序设置/ etc。如果您想要为您的程序进行全局设置,则必须使用管理员帐户进行此操作。