代码之家  ›  专栏  ›  技术社区  ›  IbrarMumtaz

c->更新win7/vista上的appsettings.config文件

  •  2
  • IbrarMumtaz  · 技术社区  · 16 年前

    我在这里看不到任何东西,但我记得有人告诉我,如果你想让一个应用程序更新一个配置文件,那么它需要在下…

    **C:\Users\Ibrar Mumtaz\AppData**
    

    在那里,原因是用户应该有权限在这里更新配置文件,而不是在applications install文件夹下。这是我的印象,我相当肯定这是事实。我想我在这里读到了=P

    我的问题是,这里有没有人可以在这个问题上有所启发,因为这是我在让我的应用程序进行测试之前要实现的最后一个特性。

    1)首先,需要安装程序来设置文件夹,然后将我的应用程序配置文件放到其中。我已经在使用Visial Studio安装程序,所以我的应用程序已经打包好了,但这一点让我很失望?那我该怎么做呢?我只需要有人来演示如何做到这一点,我应该可以重新配置我的应用程序来寻找新的配置文件的主页。

    2)我应该能够找到文件夹并找到其中的配置文件。一旦我知道安装程序正在将配置文件放入用户拥有权限的正确文件夹中,那么它就应该直接从那里向前移动。

    谢谢你的阅读。

    更新:

    这很直接,因为vs安装程序可以选择添加一个特殊的文件夹,所以只剩下以编程方式访问该文件夹并读写配置文件。一个问题?我用来为应用程序创建配置文件的configurationmanager类希望我的配置文件在应用程序本地,而不是在本地文件系统的完全不同的部分中相距数英里?帮我一下,好吗?

    伊布拉

    5 回复  |  直到 16 年前
        1
  •  1
  •   Noam Gal    16 年前

    如果使用vs settings文件创建应用程序设置键,并且具有用户可能希望在运行时更改的值,并保存其首选项,只需将这些设置的范围设置为“用户”而不是“应用程序”。
    这样,您就有了一个setter方法,可以编辑这些设置。默认实例,完成后调用 Save() 方法将它们保存到磁盘。

    文件将保存在用户的“appdata”文件夹中,无论它在哪里,都位于某个神秘的文件夹下。但大多数时候您不必担心它的位置,因为它将在下一次执行时自动读取,并在随后的运行中持久化到相同的位置。

        2
  •  0
  •   Henrik    16 年前

    afaik安装程序可以通过执行操作的类进行扩展。

    安装时要做的操作可能是

    var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
                        "My app name");
    if (!Directory.Exists(path)) Directory.CreateDirectory(path);
    

    卸载时反之亦然。

    app.config文件与物理程序集的位置有关。

        3
  •  0
  •   Bobby    16 年前

    实际上,如果你的应用程序在用户的机器上运行,它将拥有用户拥有的任何权限。因此,最有可能的情况是,您可以期望能够在文件系统的任何地方进行写入。

    但是,用户可能正在受限帐户下运行,因此没有权限。因此,您可以使用注册表来存储配置文件的位置(安装文件夹),然后当您尝试更新它时,如果它的权限失败,请让用户授予它。

    或者您可以使用Windows标准文件夹,因为这样做也将用户数据与应用程序数据分开。

    使用 environment.getfolderpath()。 方法获取应用程序中的“特殊文件夹”路径。

    http://www.programmersheaven.com/2/Les_CSharp_15_p2

    http://msdn.microsoft.com/en-us/library/14tx8hby.aspx

        4
  •  0
  •   wasker    16 年前

    如果您谈论的是“项目属性”->“设置”选项卡上的应用程序设置,则有两种不同类型的设置:用户级别和应用程序级别。

    如果需要在运行时更改任何设置,这些设置将是用户级设置。( http://msdn.microsoft.com/en-us/library/cftf714c.aspx )所有的更改都将隐藏在用户配置文件的私有文件夹中。

    如果您想更新应用程序级设置,最好的方法是在软件安装期间进行更新。在这种情况下,您不需要在应用程序文件夹以外的任何地方查找配置文件(yourapp.exe.config)。更可能的是,您需要在安装包中创建某种安装后事件处理程序,并运行一些脚本或其他应用程序来更新您的rapp.exe.config中的数据。安装包中的所有内容都将以提升的特权执行,因此该配置文件将是可写的。顺便说一句,如果用户使用的是受限用户帐户类型的特权,则此方案适用于2000和XP。

        5
  •  0
  •   IbrarMumtaz    16 年前

    因为在技术上我没有找到我想要的答案,6个月后,我回到了我的应用程序,并设法生成了一个不破坏我当前架构的解决方案。

    如果您正在实现一个应用程序以利用ConfigurationManager提供的一些功能,那么它将提供一个静态方法,名为:

    ConfigurationManager.OpenMappedExeConfiguration(); // takes two arguements.
    

    它可以这样使用:

            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = returnUsersAppDataFolderPath();
    
            Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    

    例如

    fileMap.ExeConfigFileName = @"some file path external to your applications install folder."
    

    请记住在前面使用“@”符号,以允许编译器按原样处理字符串。

    如果可以方便地在本地找到配置文件,那么只需使用:

    ConfigurationManager.OpenExeConfiguration(string exePath)
    

    上面是您通常会使用的配置文件,但对于我来说,我需要将配置文件放在users appdata文件夹下,所以第一个选项是我需要的。它确实有效。

    我希望这对其他人有所帮助,因为我想将我的应用程序部署到Win7和Vista环境中,因此这个问题需要问我是否要坚持使用ConfigurationManager,这是一个遗憾,最终选择的方法从来没有真正突出在第一位=。

    如果你想从你的配置文件中读取信息,那么留下一个评论,我将向你展示我是如何做到这一点的。