代码之家  ›  专栏  ›  技术社区  ›  Mark Bostleman

跨用户配置文件的文件权限

  •  3
  • Mark Bostleman  · 技术社区  · 14 年前

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

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

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

    那么,在创建文件时,是否有一种好的编程设置权限的方法,或者我应该重新考虑我的设计,因为我遗漏了一些关于内置配置特性的内容?

    edit:查找application.commonAppDataPath,但它为应用程序的每个版本维护一个文件夹,这意味着每个新部署都将重新开始。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Joel Coehoorn    14 年前

    iirc,您可以在Click Once应用程序中引用“所有用户”应用程序数据文件夹。

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

        2
  •  1
  •   Community Marks    7 年前

    基于 this so post i did this:。

    < PRE> >代码>

    filesecurity filesecurity=file.getaccesscontrol(文件); filesecurity.addaccessrule(new filesystemaccessrule(“用户”, 文件系统权限.fullcontrol, accessControlType.allow)); file.setaccesscontrol(文件,文件安全);。

    . >.

    特洛尔
    accessControlType.allow));
    file.setaccesscontrol(文件,文件安全性);