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