创build一个文件只能在我的应用程序在C + +?

我正在开发一个小办公室的申请,以维持他们的货币账户。 我的应用程序可以帮助创build一个可以存储所有信息的文件。 但是除了我的应用程序之外,它不应该被用户访问。 为什么? 因为有人可能会删除文件,所有的logging将会消失。 该环境是一个Windows个人电脑与一个单一的帐户pipe理权限。 我正在使用MinGW编译器在C ++中开发应用程序。 我现在有点空白,至于如何创build这样一个文件。 有什么build议吗?

如果您的应用程序可以修改它,那么运行其凭据的用户可以修改它。 另外,如果他拥有管理员权限,那么即使您的应用程序运行在不同的凭据下,并且该文件受ACL保护,也无法阻止他删除内容。

现在,由于这个问题似乎不是安全的,而是为了保护用户不受自己的影响,我只是将文件存储在一个“看不见”的位置,并对此感到满意。 将数据写入%APPDATA%\yourappname 1 ,这样的目录专门用于用户特定的应用程序数据,而不是用户直接触摸的数据。

如果你想成为偏执的人,你可以启用你可以找到的每个安全设置(隐藏目录,当应用程序没有运行时用限制性ACL保护它,打开它来独占访问,…),但是如果你问我只是浪费时间:

  • 一般用户(我们的目标AFAICT)不会在appdata中混乱,因为它是一个隐藏的文件夹,
  • 如果有足够的决心在脚下自杀(或自愿造成伤害),那么四处乱窜的“权力使用者”将会找到办法,因为在你的情况下安全设置很容易绕过(管理员可以接管任何文件和更改其ACL,并使用Unlocker等应用程序来规避文件锁定);
  • 有正当理由访问该文件的技术人员(例如,他必须采取/恢复其备份)将受到所有这些无用的预防措施的挫败。

  1. 你可以通过展开相应的环境变量或者通过SHGetFolderPath / SHGetKnownFolderPath(或者在新的Windows版本中为它发明的任何替换)来获得实际的%APPDATA%路径。

确保您的应用程序在Windows启动时加载,并使用dwShareMode 0选项打开文件。

这是一个MSDN示例

您将需要给这些文件自己的文件扩展名,也许还有其他安全措施(即文件的密码)。 如果你想这些文件被Windows建议,那么你将不得不做一些与注册表的工作。

这是一个很好的来源,因为你只关心Windows。

http://msdn.microsoft.com/en-us/library/windows/desktop/ff513920(v=vs.85).aspx

至于保存数据被删除,冗余我的朋友冗余。 与网络管理员讨论他们如何保持数据安全。 我敢打赌,他们把很多备份命名为其中一个原因。

但是除了我的应用程序之外,它不应该被用户访问。

你不能这样做。

如果用户有足够的判断,所有存在于机器用户身上的物理访问权限都可以被删除。

您可以保护您的文件在程序运行时不被删除 – 在Windows上,您不能删除打开的文件。 保持文件打开,程序运行时不会将其删除。 相反,他们会通过任务管理器杀死你的程序,并删除文件。

要么,要么你可以把它上传到某个地方。 不能在物理上访问的设备上的数据不容易被用户删除。 然而,有人将不得不运行服务器(并处理安全性+可能写服务器软件)。 在你的情况下,它可能不值得。

我建议在帮助文件中记录用户数据的位置,你应该把“!不要删除this.txt”或其他东西放到这个文件的文件夹中。