1

我正在创建一个应用程序并使用它Properties.Settings来存储设置。

但是,假设我的应用程序在用户的桌面上并被调用Program.exe,现在,当用户复制此可执行文件并将其放置在其他地方甚至重命名它时,所有设置都消失了。

为什么 C# 会这样做?在与用户范围相关的情况下,有什么方法可以关闭它?我不希望使用应用程序范围,因为多个用户可以共享同一台计算机。

4

3 回答 3

2

这些设置可能存储在{appname}.exe.config其中显然没有与可执行文件一起复制/重命名。将可执行文件与文件一起复制,在应用程序中对其进行硬编码,或者找到另一种机制来获取/设置应用程序设置(如注册表)。

应用程序将在一个名为{appname}.exe.config. 如果可执行文件被重命名(不重命名.config文件)或复制到另一个位置而不复制.config文件,应用程序将不知道在哪里查找它们的设置,因此它们将是空白的(除非您在应用程序)。

您可以通过在 Visual Studio 的“文件”中放置一个值来“硬编码”默认设置Settings.settings(这有效地将默认值作为属性添加到设置中)。

另一种选择是直接在源代码中对值进行硬编码。我不推荐这种方法,因为它阻碍了更改该值的能力,但如果您希望能够通过复制 EXE(而不是其他任何内容)来部署应用程序,那么它是一种选择。

于 2012-12-17T19:31:20.077 回答
0

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

使用 Properties.Settings 时的设置(及其位置)由特定设置的范围设置确定。

应用程序范围的设置位于 app.config 文件中(在编译时重命名为 .exe.config - 这些设置在运行时只读),用户范围的设置保存在关联的 user.config 中机器上的用户配置文件(这些设置在运行时是读/写的)。通过适当地确定您的设置范围,您应该能够避免此类问题。

于 2012-12-17T19:48:46.553 回答
0

设置存储在用户配置文件中(在 C:\Users[UserName]\AppData\Local 下),这些设置位于具有应用程序名称的文件夹下,并且还具有它们所引用的 exe 文件位置的标识符,例如: MyApp.exe_Url_hpvvra0rj4y03ebpz3cfmzsrcpczat11,指的是Program Files下的可执行文件,如果我移动或复制exe并运行它,它将创建另一个带有另一个URL的文件夹(例如MyApp.exe_Url_vqzsq0spwewydv3wrnebtqji24nwuboe),我没有找到避免的方法但一个好的解决方法是从另一个配置文件复制设置,请注意,此方法并非万无一失,因为您必须选择正确的文件将设置复制到,如果您希望不断复制或移动您的 exe,这将是一项艰巨的任务。

另一种解决方法是简单地创建您的自定义设置类并将文件放在您的应用程序可以找到的任何地方,而不依赖于.NET 上的内置设置。

于 2012-12-17T20:03:10.710 回答