C# - >在Win7 / Vista上更新AppSettings.config文件

时间:2010-01-24 16:57:39

标签: c# appsettings

我在这里看不到任何东西,但我确实记得被告知如果你想要一个应用程序更新配置文件,那么它需要在......

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

那里的某个地方,原因是用户应该在这里更新配置文件,而不是在应用程序安装文件夹下。这是我的印象,我相当肯定这是绝对的情况。我想我在这里读了= p

我的问题是,这里是否有任何人可以对此有所启发,因为这是我要在我的应用程序出来测试之前要实现的最后一个功能。

1)首先,需要安装程序来设置文件夹,然后将我的应用程序配置文件放入其中。我已经使用了visial studio安装程序,所以我打包了我的应用程序,但这一点让我失望了?那怎么办?我只需要有人来展示如何做到这一点我应该是O.K重新配置我的应用程序以寻找配置文件的新主页。

2)我应该能够找到如何找到该文件夹​​并找到其中的配置文件。一旦我知道安装程序将配置文件放入用户具有权限的正确文件夹中,那么它应该从那里直接进行。

感谢阅读。

更新:

这是非常直接的,因为VS安装程序可以选择添加一个特殊文件夹,所以剩下的就是以编程方式访问文件夹并读取和写入配置文件。一个问题?我用于为我的应用程序创建配置文件的ConfigurationManager类需要我的配置文件是应用程序的本地文件,而不是在本地文件系统的完整不同部分中不远处? Errr在这里帮助Plz?

Ibrar

5 个答案:

答案 0 :(得分:1)

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

该文件将保存在用户的“AppData”文件夹中,无论它在哪里,都在一些神秘的文件夹下。但是大多数时候你不必担心它的位置,因为它会在下次执行时自动读取,并在后续运行中持久保存到同一位置。

答案 1 :(得分:0)

Afaik可以使用可以执行操作的类来扩展安装程序。

在INSTALL上做的动作可以是

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

反之亦然卸载。

我认为App.config文件与物理组件的位置有关。

答案 2 :(得分:0)

实际上,如果您的应用程序在用户的计算机上运行,​​它将具有用户拥有的任何权限。所以很有可能,你可以期望能够在文件系统的任何地方写入。

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

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

使用 Environment.GetFolderPath()方法获取应用中的“特殊文件夹”路径。

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

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

答案 3 :(得分:0)

如果您正在谈论在项目属性上找到的应用程序设置 - >设置选项卡,然后有两种不同类型的设置:用户级和应用级。

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

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

答案 4 :(得分:0)

因为我在技术上没有找到我想要的答案,所以在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)

上面是你通常会使用的,但对我来说,我需要我的配置文件位于用户AppData文件夹下,所以第一个选项就是我需要的。它确实有效。

我希望这可以帮助其他人,因为它对我来说因为我想将我的应用程序部署到Win7和vista环境因此这个问题需要问我是否坚持使用ConfigurationManager这是一个耻辱的选择方法到底从来没有真的脱颖而出=)。

如果你想从你的配置文件中读取然后发表评论,我会告诉你我是如何做到这一点的。