以下是我的情况:
我有一个使用配置文件的应用程序。配置文件适用于系统的所有用户,所有用户都可以更改配置。
我决定将配置文件放在“所有用户\应用程序数据”文件夹中。
问题是文件只能由创建它的用户写入。
这是我的临时解决方案:
创建文件时,应用程序会设置其安全选项,以便系统的所有用户都可以编写该文件。
但是,I think this is a hack我想我必须创建一个管理文件访问权限的服务。
我的应用程序是用C ++(MFC)编写的,我不是所有.Net内容的专家。所以我的第一个想法是编写一个带有COM接口的Windows C ++服务,该服务将由应用程序调用。
我的问题:
修改
我知道为所有用户设置写入权限很容易。
使用Windows XP,使用受限用户在“程序文件”和“HKLM”下的注册表项下编写文件也很容易。但是现在,如果您希望应用程序获得Vista徽标认证,则不得写入这些位置(如果虚拟商店可以“保存”您,则会发生此事件。)
也许我的最终解决方案将是“让所有用户都可写”,但我的问题实际上是:“我的解决方案是否合适,或者您是否有另一个更轻松的解决方案,不依赖于黑客修复的行为”。
我真的很抱歉从一开始就没有说清楚。
非常感谢,
尼克
答案 0 :(得分:3)
这不是正确的做法。如果您将文件放在All Users \ Application Data中,那么它应该是所有用户都可写的。创建它时,使用所有用户的写权限创建它。设置创建权限并不难。
答案 1 :(得分:1)
Raymond Chen的文章很有趣而详细,但通常过于教条和不切实际。除非这是一个具有篡改危险的关键任务系统,否则我会用一大堆NaCl看他的观点。
您的用户是否会直接打开并修改文件?如果没有,只需使文件全局可写并在应用程序界面中强制执行合理的更改。对于大多数应用程序而言,保护多用户系统免受篡改是不值得花费时间和精力的。
或者,使用数据库。
答案 2 :(得分:0)
我甚至不打扰COM。命名管道对您的服务也很好,并且使用ACL保护这些管道要容易得多。服务将是如此简单,我甚至不打扰MFC或.NET,纯C ++应该没问题。所有繁重的工作都是由您的真实应用程序完成的;该服务只检查管道输入的请求是否合理。 (即不太大等。)