我们有一个使用Visual Studio 2005为Windows Mobile和Windows平台构建的应用程序。我们使用单个代码库开发了该应用程序的两个版本,以尝试减少代码重复。我们遇到的问题之一是ConfigurationManager对Windows Mobile平台不可用。我们通过构建自己的ConfigurationManager来解决此问题,该ConfigurationManager可以将设置读取和写入设置到Program Files文件夹中的“ Application.exe.config”文件中。因此,我们的Windows版本和Windows Mobile版本都使用此相同的自定义ConfigurationManager。

在Windows XP和Windows Server 2003上可以正常工作,但是在Windows 7上我们遇到了问题,我不知道如何解决。当我们对配置文件进行更改时(只能将其复制到另一个文件夹,进行更改然后再复制回去...),否则当我们尝试直接将更改保存到以下位置时会收到“拒绝访问”消息(在Program Files文件夹中),只有当我们以管理员身份运行该应用程序时,我们所做的更改才会反映出来。如果我们以普通用户身份运行该应用程序,则始终显示安装中的默认设置。我们怀疑这是与Windows 7安全相关的问题,但是有人可以解释为什么会这样吗?我们如何更改设置,以便在以普通用户身份运行应用程序时也能应用这些设置?

最佳答案

我怀疑您的应用程序至少一次在未提升运行且没有清单的情况下尝试写入配置文件。这为您的配置文件创建了一个“兼容性文件”文件夹。当您非高架​​运行时,它现在看起来在那里。 (有关如何确认此内容的屏幕截图,请参见http://www.gregcons.com/KateBlog/FindingFilesYoureSureYouWrote.aspx。)

如果您想要的只是一个人类的程序,或者是您编写的可以提升运行的实用程序,以便能够编辑配置文件,则可以将其保留在原处,并在应用程序上放置清单以防止虚拟化。有关清单清单,请参见http://www.gregcons.com/KateBlog/AddingAManifestToAVistaApplication.aspx。该博客文章继续告诉您如何嵌入清单,但您不必这样做,外部清单即可。如果您的应用程序是foo.exe,则将清单命名为foo.exe.manifest并将其放在同一文件夹中。这将阻止虚拟化,并导致应用读取“实际”配置文件。

如果经常更改配置文件,请不要在“程序文件”下写入文件。 AppData是一个不错的选择。

关于c# - 仅当应用程序以管理员身份运行时,才在Windows 7中正确读取对应用程序配置所做的更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7267965/

10-11 15:11
查看更多