2

我在这里看不到任何东西,但我记得有人告诉我,如果您希望应用程序更新配置文件,那么它需要位于...

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

好吧,原因是用户应该有权在此处而不是在应用程序安装文件夹下更新配置文件。这是我的印象,我相当肯定这肯定是这样的。正如我想我在这里读到的那样= p

我的问题是,这里有没有人可以对此有所了解,因为这是我在将应用程序进行测试之前要实现的最后一个功能。

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

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

谢谢阅读。

更新:

这很简单,因为 VS 安装程序可以选择添加一个特殊文件夹,所以剩下的就是以编程方式访问该文件夹并读取和写入配置文件。一个问题?我用来为我的应用程序创建配置文件的 ConfigurationManager 类希望我的配置文件在应用程序本地,而不是在本地文件系统的完全不同的部分中?Errr 在这里帮忙好吗?

伊布拉

4

5 回答 5

1

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

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

于 2010-01-24T17:28:41.397 回答
0

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

在 INSTALL-action 上做的可能是

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

卸载时反之亦然。

我认为 App.config 文件与物理程序集所在的位置有关。

于 2010-01-24T17:15:26.827 回答
0

实际上,如果您的应用程序在用户的机器上运行 - 它将拥有该用户拥有的任何权限。所以最有可能的是,您可以期望能够在文件系统上的任何位置进行写入。

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

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

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

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

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

于 2010-01-24T17:16:19.853 回答
0

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

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

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

于 2010-01-24T17:32:35.277 回答
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,可惜最终选择的方法从未真正脱颖而出首先=)。

如果您想从您的配置文件中读取,请发表评论,我将向您展示我是如何做到这一点的。

于 2010-07-28T11:13:02.120 回答