2016-09-16 44 views
-1

我正在研究一个控制硬件设备的应用程序。由于各种原因(自助服务,保修,运营商的一般信息等),我需要存储使用数据,特别是硬件的运行时间。这需要经常更新(至少每分钟)。如何安全地存储经常更新的值?

因此,我需要使用数据:

  1. 可用于应用程序不管哪个用户启动它。
  2. 保持不变,无论它重新安装的应用程序。
  3. 对于用户改变有些困难(如果不是不可能的话)。
  4. 不需要管理员权限来由应用程序写入和读取。

当前应用程序是用Visual Basic 6.0编写的。但它很快就会在C#中重写,并且在那里使用相同的方法也会很有趣。

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

+2

一个轻量级*数据库*如SQLite/SQL Server Compact –

+0

一个新的c#平台的好主意。但是我们的目标是为目前的vb6平台“尽可能少的工作”。我对添加一个全新的主要组件(比如SQL数据库)有点犹豫。 – Oystein

+0

大多数解决方案将在VB6与现代NET解决方案中大不相同。 – Plutonix

回答

0

您应该使用支持有效更新的某种格式的文件。在许多情况下,INI格式已经足够好了,即使纯文本文件可能与您正确管理“随机”更新一样长。文件格式无关紧要,取决于您。即使是Jet 4.0 MDB,如果您拥有大量数据,但是没有理由为此部署一些特定的第三方嵌入式DBMS引擎,那么它也是有意义的。 Jet 4.0和ADO都在Windows中发布,因此不需要部署任何东西,而与SQLite类似。

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

最好的答案是为您的安装运行高架下的ProgramData特殊的文件夹创建一个应用程序,唯一的文件夹,并设置此安全完全控制或东西少了几分所有登录的用户(Everyone组适用于本这几天因为它不包括Guest)。

您可以使用壳牌平API调用或壳牌自动化对象查找ProgramDatassfCOMMONAPPDATA又名CSIDL_COMMON_APPDATA甚至较新的FOLDERID_ProgramData与新外壳调用)。

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

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

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

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