每个可执行文件的不同应用

时间:2012-12-17 19:26:25

标签: c# visual-studio-2010

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

使用Properties.Settings时的设置(及其位置)由特定设置的Scope设置决定。

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

答案 2 :(得分:0)

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

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