.net - 跨用户配置文件的文件权限

标签 .net winforms configuration configuration-files

我正在为 Windows 窗体应用程序使用 ClickOnce 部署,并且我需要在跨部署和跨用户配置文件中保留的基于计算机的配置信息。因此,每用户配置没有帮助。我还希望可以使用文本编辑器在每台计算机上众所周知的位置(众所周知,即组织)轻松访问配置文件。

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

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

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

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

最佳答案

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

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

关于.net - 跨用户配置文件的文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2290201/

相关文章:

c# - 使用可拖动和可调整大小的选择窗口创建自定义图片框

c# - 企业配置思路

logging - 无法将 Serilog 配置转换为 appsettings.json

configuration - 如何管理单个 Haskell 程序的多个配置?

.net - 将自定义属性添加到标准控件

c# - 命名空间 'Optimization' 中不存在类型或命名空间名称 'System.Web'

c# - 如何使用单声道将 .NET Windows 服务应用程序迁移到 Linux?

.net - 在 Windows 窗体 C# 应用程序中拥有配置文件的最简单方法

c# - C#切换用户控件时暂停视频或停止Web浏览器

c# - 在任务中捕获异常的最佳方法是什么?