域兼容性:应该在何处编写共享数据?

时间:2009-07-01 00:31:31

标签: windows windows-7 windows-vista installer shared-data

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

用例是这样的: 个人用户需要登录计算机并使用它来获取数据。主管用户需要能够查看单个用户的肩膀,并验证他们是否正确地执行了他们的工作。这些主管还需要检查系统日志以确保系统正常运行。

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

在Vista / Windows 7中,一切都在变化。如果IT人员将所有内容锁定到单个用户,则这些用户仍然需要共享此公共数据,并且不允许将特定于应用程序的配置参数和用户列表写入应用程序的目录。如果系统位于具有域的位置,则该用户没有本地管理员权限,甚至安装也可能是一个问题。

解决方法是让安装程序创建一个每个用户都可以写入的目录,然后将所有特定于用户的数据放在该目录中吗?如果是这样,是否可以让安装程序以这种方式行事(即使必须给予管理员权限)?或者有没有办法让Vista / 7以更自由的XP方式运行?

5 个答案:

答案 0 :(得分:1)

最权威的资源是MSDN中每个Windows版本的应用程序规范中的"Data and Settings Management。阅读本文,了解Windows上存在的各种特殊文件夹背后的基本原理,以及如何选择将数据写入哪一个。

接下来,您的应用需要使用SHGetSpecialFolderLocation API来检索特殊位置的路径。

最喜欢满足您需求的文件夹 - 由一位用户写入,由管理员阅读,将是CSIDL_APPDATA - 在Windows 6.X上,对应C:\ProgramData\

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

  

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

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

答案 3 :(得分:0)

默认情况下,没有所有用户都具有写访问权限的目录(除了可能是系统范围的TEMP目录,但我不会在那里写入日志信息)。

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

另一个相当简单的解决方案是让每个用户只登录他或她的个人资料中的目录,例如Application Data\Your App。然后,管理应用程序仍然可以相当容易地聚合所有日志记录信息,如果未锁定读取权限,用户甚至可以读取彼此的数据。

答案 4 :(得分:0)

将数据存储在网络上的某个位置不是更好吗?这样,您只需设置一次安全性,并且更容易维护。主管可以轻松读取许多电脑的数据,而无需访问个人电脑......