2009-07-01 105 views
3

我们已经编写了一个在XP中运行得很好的应用程序,但是对Vista和Windows 7有严重的迁移问题,可能是由于正在编写用户数据的地方。域兼容性:共享数据应该写在哪里?

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

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

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

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

回答

1

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

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

,大多数likley提供您的需求文件夹 - 被一个用户写,管理员读,会CSIDL_APPDATA - 这,在Windows 6.X,对应于C:\ProgramData\

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

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

0

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

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

+0

因此,根据我们安装在哪个操作系统,我们转到该目录或其他目录XP?两者有共同之处吗? – mmr 2009-07-01 00:34:53

+0

我相信XP有一个类似的文件夹下的文件和设置 - 如果你想只有一个代码路径,我认为%PUBLIC%环境变量将工作 – 2009-07-01 00:37:45

+0

%公众%是vista新的,根据:http:// vistaonwindows.com/environment_variables.html – mmr 2009-07-01 00:38:55

0

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

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

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

1

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

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

0

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