2010-01-20 63 views
3

我建立一个产品,涉及建议的文件位置将由所有的Windows用户编辑?

  • 在本地计算机上的Windows服务的缓存数据,
  • 用户进程读取数据并写入自己的数据,
  • 服务又回信说数据到服务器。

我应该在哪里放置这些数据文件,这样它们将被所有用户共享并且可读写?该软件将在公司环境中运行,在这种环境中,桌面有时非常锁定,所以例如某些用户将不具有C:\ Program Files的写权限。

我不认为C:\ Documents and Settings \ All Users \ Application Data \是一个很好的候选人 - 我认为默认情况下只有Admins &高级用户可以在这里写入权限。

我可以使用每个用户的应用程序数据文件夹,但这会有点痛苦,因为不同的人可以使用每台机器......所以如果只有一个共享位置会更简单。

我在C#.net 2005中开发,但这可能不太相关。

回答

2

不幸的是,你没有真正的选择。您必须(您必须)调用SHGetSpecialFolderLocation以获取c:\ users \ public \ AppData的路径(这是您上面链接的文件夹的名称,但在Vista和可能的Windows 7上) 然后,您必须创建您自己的应用程序文件夹。然后,您必须使用安全API修改所创建文件夹的ACL。

系统上没有任何文件夹使用默认ACL,允许多个非管理员用户读取和写入相同的文件。

c:\ users \ public \ AppData是最接近的。在这里修改应用程序文件夹的ACL似乎是最好的方法。当然,一旦使用ACL修改,文件夹确实可以在任何地方创建。但是这可能会给系统管理员带来惊喜,并导致安全漏洞。

+0

您认为在c:\ users \ public \ AppData中使用修改后的ACL有一个文件夹是合理的,这样所有用户都可以读/写,否则这也会让系统管理员感到意外和/或与自动化策略冲突? 我想这将是可能的,但还有很多工作要为每个用户单独存储在其用户AppData文件夹中的缓存,但我真的想尽量避免这种情况。 – Rory 2010-01-20 11:44:33

+0

\ users \ public \ AppData是已经合理预期所有用户都可以读取文件的(唯一)文件夹。因此,我认为这是最合理的地方(至少令人惊讶:P)添加一个文件夹,所有用户都有写入权限。 – 2010-01-20 13:15:07

+0

事实上,我在'Environment.SpecialFolder.CommonApplicationData'内创建了一个子文件夹,并设置了ACL,这样所有用户都可以读/写。这个位置通常在Win7/Win8上是'C:\ ProgramData'(而不是'C:\ users \ public'),在XP上是'C:\ Documents and Settings \ All Users \ Application Data'。 – Rory 2014-11-09 12:55:00