C# 如何/在何处安全存储频繁更新的值?

C# 如何/在何处安全存储频繁更新的值?,c#,vb6,C#,Vb6,我现在正在开发一个控制硬件设备的应用程序。由于各种原因(自助服务、保修、向操作员提供的一般信息等),我需要存储使用数据,尤其是硬件的运行时间。这需要经常更新(至少每分钟更新一次) 因此,我需要使用数据来: 无论哪个用户启动应用程序,都可以使用该应用程序 无论应用程序是否重新安装,都保持不变 对于用户来说,更改可能有些困难(如果不是不可能的话) 不需要管理员权限即可由应用程序写入和读取 目前,该应用程序是用Visual Basic 6.0编写的。但很快就会用C#重写,在那里使用同样的方法也会很有趣

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

因此,我需要使用数据来:

  • 无论哪个用户启动应用程序,都可以使用该应用程序
  • 无论应用程序是否重新安装,都保持不变
  • 对于用户来说,更改可能有些困难(如果不是不可能的话)
  • 不需要管理员权限即可由应用程序写入和读取
  • 目前,该应用程序是用Visual Basic 6.0编写的。但很快就会用C#重写,在那里使用同样的方法也会很有趣


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

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

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

    最好的答案是运行Highted的安装程序在
    ProgramData
    特殊文件夹下创建一个应用程序唯一文件夹,并将此文件夹的安全性设置为完全控制,或者对所有登录用户设置一些较低的安全性(由于
    Everyone
    组排除了
    Guest
    ,因此最近一直在使用此组)

    您可以使用Shell平面API调用或Shell自动化对象来查找
    ProgramData
    ssfcomonappdata
    a.k.a.
    CSIDL\u COMMON\u APPDATA
    ,甚至使用较新的Shell调用查找较新的
    FOLDERID\u ProgramData

    避免使用环境变量和硬编码的名称字符串,这是不可靠的。环境变量可以更改,名称字符串可以本地化,也可以在不同版本的Windows之间更改

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

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


    有关VB6代码示例,请参阅。

    像SQLite/SQL Server Compact这样的轻量级数据库是一个新的c#平台的好主意。但我们的目标是对当前的vb6平台“尽可能少的工作”。我对添加一个全新的主要组件有点犹豫,例如SQL数据库。大多数解决方案在VB6和现代网络解决方案中都会有很大的不同。看起来您在VB6中仅限于平面文件。
    %SystemDrive%\ProgramData\YourComp\YourApp
    至于第2点,您可以将该逻辑构建到安装程序中,或者在第一次运行时生成一个唯一的名称。