【问题标题】:UserSettings lost when application moved - strongname移动应用程序时用户设置丢失 - strongname
【发布时间】:2019-02-23 08:49:32
【问题描述】:

在我的公司,用户正在从网络驱动器打开应用程序。要更新(覆盖)这些应用程序,每个用户都必须关闭应用程序。

为了避免我创建了一个通过文件夹名称查找最新版本的应用程序。例如:

Folder: 1.0
Folder: 1.0.1
Folder: 1.0.2
Folder: 1.2
Folder: 2.0

AppLauncher.exe

如果我单击 AppLauncher.exe,文件夹 2.0 中的应用程序将启动。 问题是用户设置在新版本上总是丢失,因为应用程序位于另一个文件路径(版本文件夹)上。

在这个thread 中提到的解决方案是强命名应用程序。 我不能这样做,因为签署我的应用程序意味着我必须签署所有其他程序集。这在我的情况下是不可行的。

还有其他解决办法吗?

【问题讨论】:

  • 您可以尝试复制文件夹并以不同的名称保存吗?这也可能会复制用户设置
  • Brr,挖一个更深的洞的方法。强命名太简单了,不能不考虑。程序员倾向于认为它需要证书和代码签名,其实不需要。
  • 如何在没有代码签名的情况下使用强名称?

标签: c# wpf settings


【解决方案1】:

看看ApplicationSettingsBase.Upgrade

此方法将以前版本的设置与当前设置(在内存中)合并。您可能希望保存生成的设置。

我的 program.cs 中有这段代码:

private static void Main(string[] args) {
        Properties.Settings.Default.Upgrade();
        Properties.Settings.Default.UpgradeRequired = false;
        Properties.Settings.Default.Save();
        //Other stuff
}

【讨论】:

  • 这不太可能有帮助,因为应用程序位于完全不同的目录中。如果没有强名称,user.config 文件的存储位置将具有非常不同的哈希值。 Upgrade() 仅在 EXE 程序集版本增加时有效。
  • 你应该添加 if(Settings.Default.UpgradeRequired) { ..upgrade.. }
猜你喜欢
  • 2013-05-21
  • 1970-01-01
  • 2011-09-19
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多