用于控制“所有用户\应用程序数据”中文件的访问的Windows服务

时间:2009-01-15 14:41:14

标签: c++ windows mfc

以下是我的情况:

我有一个使用配置文件的应用程序。配置文件适用于系统的所有用户,所有用户都可以更改配置。

我决定将配置文件放在“所有用户\应用程序数据”文件夹中。

问题是文件只能由创建它的用户写入。

这是我的临时解决方案:

创建文件时,应用程序会设置其安全选项,以便系统的所有用户都可以编写该文件。

但是,I think this is a hack我想我必须创建一个管理文件访问权限的服务。

我的应用程序是用C ++(MFC)编写的,我不是所有.Net内容的专家。所以我的第一个想法是编写一个带有COM接口的Windows C ++服务,该服务将由应用程序调用。

我的问题:

  • 我的想法是个好主意还是有人知道更好的方法?
  • 在Windows中提供服务的新方法是否比普通的C ++和COM更新?

修改

我知道为所有用户设置写入权限很容易。

使用Windows XP,使用受限用户在“程序文件”和“HKLM”下的注册表项下编写文件也很容易。但是现在,如果您希望应用程序获得Vista徽标认证,则不得写入这些位置(如果虚拟商店可以“保存”您,则会发生此事件。)

也许我的最终解决方案将是“让所有用户都可写”,但我的问题实际上是:“我的解决方案是否合适,或者您是否有另一个更轻松的解决方案,不依赖于黑客修复的行为”。

我真的很抱歉从一开始就没有说清楚。

非常感谢,

尼克

3 个答案:

答案 0 :(得分:3)

这不是正确的做法。如果您将文件放在All Users \ Application Data中,那么它应该是所有用户都可写的。创建它时,使用所有用户的写权限创建它。设置创建权限并不难。

答案 1 :(得分:1)

Raymond Chen的文章很有趣而详细,但通常过于教条和不切实际。除非这是一个具有篡改危险的关键任务系统,否则我会用一大堆NaCl看他的观点。

您的用户是否会直接打开并修改文件?如果没有,只需使文件全局可写并在应用程序界面中强制执行合理的更改。对于大多数应用程序而言,保护多用户系统免受篡改是不值得花费时间和精力的。

或者,使用数据库。

答案 2 :(得分:0)

我甚至不打扰COM。命名管道对您的服务也很好,并且使用ACL保护这些管道要容易得多。服务将是如此简单,我甚至不打扰MFC或.NET,纯C ++应该没问题。所有繁重的工作都是由您的真实应用程序完成的;该服务只检查管道输入的请求是否合理。 (即不太大等。)