如何/在何处安全地存储经常更新的值?

时间:2016-09-16 14:09:39

标签: c# vb6

我正在开发一个控制硬件设备的应用程序。由于各种原因(自助服务,保修,运营商的一般信息等),我需要存储使用数据,尤其是硬件的运行时间。这需要经常更新(至少每分钟一次)。

因此,我需要使用数据:

  1. 无论哪个用户启动它,都可以使用该应用程序。
  2. 无论是否重新安装该应用程序,都保持不变。
  3. 对于用户来说有点困难(如果不是不可能的话)。
  4. 不需要管理员权限来由应用程序编写和阅读。
  5. 目前,该应用程序是用Visual Basic 6.0编写的。但它很快就会在C#中重写,在那里使用相同的方法会很有趣。

    任何想法都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您应该使用某种格式的文件来支持有效的更新。在许多情况下,INI格式足够好,甚至纯文本也可能只要您正确管理“随机”更新。文件格式无关紧要,取决于您。如果您拥有大量数据,即使是Jet 4.0 MDB也是有意义的,但没有理由为此部署一些特殊的第三方嵌入式DBMS引擎。 Jet 4.0和ADO都在Windows中发布,所以没有任何东西可以部署,与SQLite相比。

诀窍是把它放在所有用户可用的地方进行更新。

最佳答案是您的安装程序运行已提升,以便在ProgramData特殊文件夹下创建一个应用程序唯一文件夹,并将此安全性设置为完全控制,或者为所有已登录用户设置更少的安全性({{ 1}}群组适用于此,因为它排除了Everyone)。

您可以使用Shell Flat API调用或Shell Automation对象查找GuestProgramData又名ssfCOMMONAPPDATA,或者使用较新的Shell调用查找较新的CSIDL_COMMON_APPDATA。< / p>

为此避免使用环境变量和硬编码名称字符串,这是不可靠的。环境变量可以更改,名称字符串可以本地化或从Windows版本更改为。

如果您的安装程序不够智能,无法处理此问题,您也可以将其作为程序首次运行操作的一部分来执行,甚至不需要提升。创建用户在创建的子文件夹上具有所有者访问权限,因此有权扩大对所有用户的访问权限。

通常,创建的文件夹路径的唯一部分使用公司名称和产品名称。通常,您的代码从您可以通过VB6 FOLDERID_ProgramData对象获取的值中获取这些值。

有关VB6代码示例,请参阅[VB6] ProgramData for common files