【问题标题】:User settings reset when the application is moved移动应用程序时重置用户设置
【发布时间】:2013-05-21 11:23:20
【问题描述】:

我注意到,如果您将该应用程序 .exe 文件移动到另一个位置,用户设置会重置。

据我了解,这是因为 app 数据文件夹中的位置也是基于 .exe 的路径,在生成哈希时会考虑到这一点。

我知道有不同的选择,要么使用注册表,要么手动创建自定义配置文件,但我的问题是,当应用程序 (.exe) 移动到另一个位置时,是否可以保留用户设置Microsoft 提供的默认功能?

对于我的测试,我使用一个独立的应用程序(仅一个 .exe 文件)。只需将文件从/Desktop/ 移动到/Desktop/Test/,就会在C:\Users\<user>\AppData\Local\<company>\Appname_Url_<hash> 下生成一个新文件夹,其中包含默认的user.config。旧的 user.config 仍然可用,因此如果您将 .exe 文件移回其之前的位置,则之前的设置会再次加载。这变得很麻烦,不仅因为您丢失了设置,而且如果您在 10 个不同的位置移动文件 10 次,最终会在 appdata 中添加 10 个新文件夹。

【问题讨论】:

  • 可能更适合superuser.com。当然,除非“那个应用程序”是您自己编写的应用程序。
  • 当然是,毕竟这是一个编程相关的网站。所以这个问题与我正在编写的软件有关。因此 C#/winforms 标签:)
  • 你是只移动exe文件还是移动所有文件夹?我认为如果您移动所有文件夹,它应该保持不变
  • 它是一个独立的应用程序(只有一个 .exe 文件)。只需将文件从 /Desktop/ 移动到 /Desktop/Test/ 会导致在 C:\Users\\AppData\Local\\Appname_Url_ 下使用默认用户生成一个新文件夹.config 在里面。旧的 user.config 仍然可用,因此如果您将 .exe 文件移回其之前的位置,则之前的设置会再次加载。这变得很麻烦,不仅因为您丢失了设置,而且如果您在 10 个不同的位置移动文件 10 次,您最终会在 appdata 中添加 10 个新文件夹。
  • 最后一条评论中的信息有助于解释您的问题,并且可能从一开始就应该包含在问题中。快,在获得更多反对票之前使用edit 链接。

标签: c# winforms settings


【解决方案1】:

这实际上是一项安全功能,与程序集部署和 clickonce 相关。 我认为您只需向主程序集添加一个强名称即可解决此问题。

如果您没有强名称,则名称将是这样的,并且如果应用程序路径更改(请参阅 Url 令牌),名称也会更改:

%appdata%\WindowsFormsApplication1\WindowsFormsApplication1._Url_3pei3cdnq3srqpjiwh1qnf12ncsp5c2w\1.0.0.0\user.config

如果您有一个强名称,它将是这样的,并且它不会改变,因为您的应用源现在已被识别,无论其当前位置是什么(请参阅 StrongName 令牌):

%appdata%\WindowsFormsApplication1\WindowsFormsApplication1._StrongName_fe0ndyau2vlgeac4gmbg13u3q4jtyrqv\1.0.0.0\user.config

【讨论】:

  • 这实际上是一个了不起的解决方案。到目前为止,在我阅读的所有帖子中都没有人提到它,并且它实际上可以在没有任何进一步修改的情况下工作。谢谢。
  • 在哪里设置强名称?如果我签署应用程序,我也需要签署所有其他程序集,而这在我的情况下是不可行的。
【解决方案2】:

来自this blog post,关于配置文件的位置:

如果您需要将某些设置存储在其他位置 原因,推荐的方式是编写自己的 SettingsProvider。

这告诉我,使用一点代码,您可能可以将文件存储在您想要的位置,并且它不会移动。

【讨论】:

  • 这绝对是可能的,但是你如何重用当前的Visual Studio IDE设置编辑器和生成的关联类呢?即使您编写了自定义 SettingsProvider,您仍然需要重写大量代码来支持它。
  • 它确实有效,这实际上是我的第一种方法,但问题始于您开始在设置中使用不同的类。例如,stackoverflow.com/a/11398536/1630928 遭受 Point/Size 类的困扰,我确信它可能还有一些我尚未测试过的问题。所以我假设你需要编写相当多的代码并进行相当多的测试以确保存在默认功能,即使那样总是会有你无法预测的事情:)
猜你喜欢
  • 2019-02-23
  • 2018-03-08
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多