【问题标题】:Where to place common user data without administrative right?没有管理权限的普通用户数据应该放在哪里?
【发布时间】:2017-09-23 17:01:49
【问题描述】:

我的 VB.NET 应用程序需要在本地计算机中存储一个文本文件。每次应用程序启动时,它都需要将信息写入该文本文件,而不管机器中的任何用户。

1) 注册表不可用。用户对 HKEY_LOCAL_MACHINE\Software 没有写入权限。 HKEY_CURRENT_USER\Software 不是首选,因为用户在第一次打开应用程序时需要提供许可证解锁密钥。我只希望在任何用户安装许可证解锁密钥后提供一次。许可证解锁密钥将写入文本文件中。

2) 我试过Environment.SpecialFolder.CommonApplicationData 并创建了一个文件夹来存储文本文件。当管理员安装它并且管理员可以打开应用程序时,它运行良好。一旦用户在同一台​​机器上登录,应用程序会设法显示启动屏幕,但它会停止工作。不会出现错误消息,它会在任务管理器的详细信息选项卡中消失。我仍然可以在Environment.SpecialFolder.CommonApplicationData 中看到文本文件。

3) 我之前检查过与此问题相关的other question。其中一位 cmets 建议隔离存储。但是,我不确定当我使用独立存储时是否会得到与上述 (2) 相同的结果。

问题:

1) 许可证文件应该存储在本地计算机的什么位置,这对所有用户都是通用的,并且所有用户都应该对该许可证文件具有写、读权限?

【问题讨论】:

  • 如果许可证密钥在安装时写出(具有管理员权限),任何用户都应该能够读取 CommonApplicationData 没有问题。或者,您可以将其保存到公共文件夹,因为删除它不符合他们的利益
  • CommonApplicationData 是正确的位置,虽然您可以在首次创建文件时更改权限,但除非您确实需要,否则不应使文件世界可写.您可能只需要修复导致应用程序崩溃的错误,最可能的原因是在打开文件时无意中请求了写入权限。
  • @HarryJohnston,应用程序必须在启动时写入文本文件。那么CommonApplicationData 是我的应用程序在任何用户登录并启动我的应用程序时读取和写入文本文件的正确位置吗?
  • @Plutonix,您建议我的应用程序使用哪个公共文件夹在没有管理员权限的情况下写入和读取文本文件?
  • 对于许可系统来说,这听起来有点前后矛盾。如果您only want the licence unlock key to be provided once after it is installed by any user,那么为什么所有用户都需要能够写入它?每次应用程序启动时写入的“信息”是否与密钥不同?对于许可系统而言,更典型的做法是针对某些内容检查密钥、令牌或哈希,而不是写下某些内容。

标签: .net windows vb.net user-data


【解决方案1】:

抛开其他考虑,CommonApplicationData 仍然是此文件的正确位置。

当您的安装程序最初创建文件时,have it set permissions 允许 INTERACTIVE 对其进行写入。理想情况下,您应该只授予FILE_GENERIC_WRITE 权限,这样非管理员用户就无法删除文件或再次更改权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多