代码之家  ›  专栏  ›  技术社区  ›  MarkF

如何让一个用户不能更改的管理器设置一个程序选项?

  •  3
  • MarkF  · 技术社区  · 17 年前

    我的应用程序需要在启动时读取一个选项,以检查它是否应该以只读模式启动。用户不允许更改该选项。

    我现在通常使用系统注册表的hklm\software部分中设置的值来执行此操作。管理员设置该值,用户无法更改该值(他们无权修改hklm中的条目)。

    问题是,在终端服务器(或Citrix)上,这会影响所有用户。我想找出一种基于每个用户的方法。其他人如何处理?系统注册表中是否有用户无法更改的此类每用户设置的部分?

    感谢您的建议或意见!

    6 回复  |  直到 10 年前
        1
  •  6
  •   Oliver Giesen    17 年前

    这基本上就是 HKEY_CURRENT_USER\Software\Policies 键用于,即注册表中特定于用户的部分中的键,默认情况下,该键对用户本人是只读的。

    按照惯例,密钥层次结构应该补充您已经拥有的 HKEY_CURRENT_USER\Software 例如,如果您的常规用户首选项存储在 HKEY_CURRENT_USER\Software\MyCompany\MyProgram 然后,受保护的用户首选项(或MS Lingo中的“策略”)应存储在 HKEY_CURRENT_USER\Software\Policies\MyCompany\MyProgram

    请注意,建议仅通过组策略对象设置此项下的值,而不通过直接注册表访问设置值。

        2
  •  3
  •   David Mohaimin Moin    17 年前

    用户不能更改的每用户设置区域的概念并没有真正意义——如果它们是用户设置,“您”(用户)希望能够更改它们。

    我可以想到两种选择:

    • 在hklm中写入设置,但 每个用户的不同设置和不带该设置集的用户的全局回退设置
    • 写在香港大学,但使用 要防止的注册表安全API 他们写信给它。你可能需要 权限大于他们的权限 阻止他们撤消权限 变化。我真的不喜欢这个 选择,但如果你想跟随它 你可能想从 RegGetKeySecurity 和 RegSetKeySecurity API。 This article 可能很有趣 好。

    就我个人而言,我认为第一个选项是最简单的,而且在用户的注册表树中也会涉及到一些不可靠的东西。希望有帮助!

        3
  •  2
  •   user59200    17 年前

    两种设置怎么样?

    1)在hklm中设置一个标志,指定只读是此计算机上的默认行为。

    2)对于任何需要完全访问权限的用户,请在HKCU中设置一个令牌,以启用完全访问权限。

    令牌可以是一些salt加上用户名的加密散列,因此无法复制它以授予其他用户权限。

        4
  •  1
  •   Wiseman    17 年前

    为什么不将选项存储在自己的数据库中?它看起来足够合理和方便(至少对我来说是8),在制作你的产品的“便携式”版本时没有问题。没有用户打扰您不希望他们打扰的任何设置。

        5
  •  0
  •   skamradt    17 年前

    hkcu而不是hklm有什么问题?这是每个用户的。不幸的是,如果用户知道如何编辑注册表并找到该项,那么它可能会被用户更改。

        6
  •  0
  •   Uwe Raabe    17 年前
    • 取一个程序附带的文件,它不应该被修改(至少不能被受限用户修改)。如果没有这样的文件,就为此目的创建一个。
    • 让管理员为那些受限制的用户设置该文件的只读权限。
    • 在程序中,检查您是否具有对该文件的写访问权。