域兼容性:共享数据应该写在哪里?

我们已经编写了一个在XP中运行得相当好的应用程序,但是Vista和Windows 7的迁移问题严重,可能是由于用户数据被写入的地方。

用例如下:个人用户需要login到机器并使用它来获取数据。 主pipe用户需要能够查看个人用户的肩膀并确认他们正在正确地执行工作。 这些主pipe还需要检查系统日志以确保系统正常运行。

我们在XP中完成这些任务的方式是直接写入C:\驱动器上的文件夹。 也许这是不好的做法,也许不是,但基本上系统的所有用户都需要能够以共享数据的forms访问这些数据。 在某些程序安装中,IT环境根本就不安全,电脑上只有一个用户,然后每个人单独login到我们的程序中。 在该程序的其他安装中,IT人员能够胜任并且针对不同用户具有不同的login,但是每个用户仍然可以访问C:并且每个用户仍然可以根据需要检查其他用户。

在Vista / Windows 7中,所有的变化。 如果IT人员把所有东西都locking到个人用户,那么这些用户仍然需要共享这些公共数据,而不允许将应用程序特定的configuration参数和用户列表写入应用程序目录。 如果系统位于具有域的位置,则用户不具有本地pipe理权限,甚至安装可能是一个问题。

解决scheme是让安装程序创build一个每个用户都可以写入的目录,然后将所有用户特定的数据放在该目录中? 如果是这样,是否有可能使安装程序的行为(即使它必须给予pipe理员权限)? 还是有办法让Vista / 7在更自由的XP时代performance?

Solutions Collecting From Web of "域兼容性:共享数据应该写在哪里?"

最权威的资源是“ MSDN中每个windows版本的应用程序规范中的数据和设置管理” ,阅读这些内容可以查看Windows上存在的各种特殊文件夹的基本原理,以及如何选择将数据写入哪个文件夹。

接下来,您的应用程序将需要使用SHGetSpecialFolderLocation API来检索到特定位置的路径。

最喜欢服务于您的需要的文件夹 – 由一个用户写入,由管理员读取,将是CSIDL_APPDATA – 在Windows 6.X上,对应于C:\ProgramData\

默认情况下,在此位置创建的文件夹的权限是管理员和所有者(即创建它的用户)的完全控制权,并且只能读取对“用户”组成员的访问权限。

完全独立的练习是编写修改目录上的访问控制列表(ACL)所需的代码。 如果您所选择的地点的默认权利不足以满足您的需要,那将是必要的。

你的应用程序的一部分可能会作为系统服务和自己的用户运行。 这样,它也可以拥有自己的安全存储,远离人类用户。 这也将消除首要的需求,让用户运行一个权限超出其正常范围的程序。

应用程序的实际用户空间部分可以连接到服务并执行简单的存储/检索操作。

我们在XP中完成这些任务的方式是直接写入C:\驱动器上的文件夹。 也许这是不好的做法,也许这不是

这绝对是。 'C:\ Users \ Public \ Public Documents'是适合的地方。 使用NTFS ACL来控制谁可以读取和写入文件。

默认情况下,没有所有用户都有写权限的目录(除了系统范围的TEMP目录外,我不会去写日志信息)。

如果您的安装程序以管理权限运行,则可以创建这样的目录,并为每个人写入权限。 最合理的地方是ALLUSERSPROFILEC:\Documents and Settings\All Users XP上的C:\Documents and Settings\All Users ,Vista / 7上的C:\Users\Public )。

另一个相当简单的解决方案是让每个用户都登录到他或她的配置文件中的一个目录,例如, Application Data\Your App 。 所有的日志记录信息仍然可以通过管理应用程序很容易地进行汇总,如果读取权限没有被锁定,用户甚至可以在需要时读取彼此的数据。

将数据存储在网络上不是更好吗? 这样你只需要设置安全一次,而且维护起来更容易。 主管可以很容易地阅读许多电脑的数据,不必访问个人电脑的…