我写了一个应用程序,在注册表中存储了一些东西。当我第一次开始时,我将它们添加到 HKEY_LOCAL_MACHINE,但不断收到写入权限错误。因此,建议我使用 HKEY_CURRENT_USER,直到我意识到我无法从另一个帐户访问它们。如何写入注册表但允许所有帐户对其进行读写?
我使用了 Python 模块 _winreg。
我写了一个应用程序,在注册表中存储了一些东西。当我第一次开始时,我将它们添加到 HKEY_LOCAL_MACHINE,但不断收到写入权限错误。因此,建议我使用 HKEY_CURRENT_USER,直到我意识到我无法从另一个帐户访问它们。如何写入注册表但允许所有帐户对其进行读写?
我使用了 Python 模块 _winreg。
HKEY_LOCAL_MACHINE/Software/YourSoftware, 需要管理员权限并且适用于安装时数据,或者HKEY_CURRENT_USER/Software/YourSoftware, 仅适用于与此环境相关的数据(此用户、此配置文件等)
编辑:另一种方法是存储配置文件并在安装时设置正确的权限。
第二次编辑:我在另一条评论中读到你想确保只有你的应用程序修改了一些文件,所以你存储修改时间。解决方法:
我的直觉说您要求仅通过您的应用程序修改文件,但在任何帐户下都是非常错误的,但或多或少正确的解决方案必须施加额外的复杂性。你的决定:审查你的要求和可能的设计,或者增加一层复杂性和可能的杂乱无章。
第三次编辑:拆分您的应用程序,拥有一个管理员应用程序,该应用程序可以具有管理员权限写入HKLM并设置设置。普通用户权限应该足以阅读HKLM
另一种可能性是将您的 HKLM 密钥的安全性更改为任何人的 R/W。尽管这在某种程度上是防止修改的安全性的想法似乎有点牵强。
Regedt32 具有设置密钥的能力,因此底层 API 也必须具有它。
话虽如此,这是一种运行应用程序的错误方式,并且显示出对安全和安全模型的严重缺乏理解。(换句话说,典型的 Windows 开发。)
我怎么变得这么愤世嫉俗了......
You'll either need admin permissions to write to HKLM, or settle for non-global reg keys. Behavior is going to vary somewhat between different versions of windows.
If you want to write to the registry so that all users can read it, you will need to run your program with administrator privileges.
You might be happier storing your information in a file instead, which will be easier to manage.