用户配置文件的文件权限

时间:2010-02-18 16:26:27

标签: .net winforms configuration configuration-files

我正在为Windows窗体应用程序使用ClickOnce部署,我需要基于计算机的配置信息,这些信息会在部署和用户配置文件之间持续存在。因此,每个用户配置没有帮助。我还希望在每台机器上众所周知的位置使用文本编辑器轻松访问配置文件(众所周知,即由组织)。

我遇到的问题是ClickOnce会覆盖每个部署的app.config。我知道configsource属性,但据我所知,目标文件必须位于应用程序的路径中 - 这意味着我无法有效地控制位置。

因此,我为要保留的数据创建了一个类,并将其序列化/反序列化到我想要的位置。这一切都很好,除了如果文件不存在我正在创建它(使用XmlSerializer和TextWriter)。这里的问题是,在创建应用程序时运行应用程序的用户成为唯一可以访问它的用户。除非我手动授予更广泛的AD组权限,否则后续用户没有权限。即使这样也没关系,因为我不想在第一次安装时触摸每台计算机。

有没有一种很好的方法可以在创建文件时以编程方式设置权限,还是应该重新考虑我的设计,因为我已经错过了有关内置配置功能的内容?

编辑:查看Application.CommonAppDataPath,但它为每个版本的应用程序维护一个文件夹,这意味着每个新部署都将重新开始。

2 个答案:

答案 0 :(得分:1)

IIRC,您可以在点击一次应用程序中引用所有用户应用程序数据文件夹。

您所做的是将默认配置分发到每个应用程序的普通应用程序数据文件夹,但从不从该文件中读取配置信息。相反,在应用程序启动时,您在所有用户应用程序数据文件夹中查找配置文件,如果找不到,则在那里复制默认文件。然后从该位置读取您的配置。

答案 1 :(得分:1)

基于this SO post我这样做了:

FileSecurity fileSecurity = File.GetAccessControl(file); fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow)); File.SetAccessControl(file, fileSecurity);