为了账号安全,请及时绑定邮箱和手机立即绑定

我可以控制.NET用户设置的位置,以避免丢失应用程序升级的设置吗?

我可以控制.NET用户设置的位置,以避免丢失应用程序升级的设置吗?

摇曳的蔷薇 2019-07-29 16:59:33
我可以控制.NET用户设置的位置,以避免丢失应用程序升级的设置吗?我正在尝试自定义user.config文件的位置。目前,它存储了哈希和版本号%AppData%\[CompanyName]\[ExeName]_Url_[some_hash]\[Version]\我希望它与应用程序的版本无关%AppData%\[CompanyName]\[ProductName]\可以这样做,怎么做?有什么影响?升级后,用户是否会丢失先前版本的设置?
查看完整描述

3 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

要回答第一个问题,您在技术上可以将文件放在任何位置,但是您必须自己编写代码,因为文件的默认位置是您的两个示例中的第一个。(链接到自己如何做

至于第二个问题,它取决于您部署应用程序的方式。如果通过.msi进行部署,则安装项目的属性中有两个哈希值(构建msi),“升级代码”和“产品代码”。这些决定了msi的安装方式,以及它是否可以升级,覆盖或安装在同一应用程序的任何其他版本旁边。

例如,如果您有两个版本的软件并且它们具有不同的“升级”代码,那么对于Windows而言,无论名称是什么,它们都是完全不同的软件。但是,如果“升级”代码相同,但“产品”代码不同,那么当您尝试安装第二个msi时,它会询问您是否要升级,此时它应该复制来自旧配置到新配置。如果两个值相同,并且版本号没有更改,则新配置将与旧配置位于同一位置,并且它不必执行任何操作。 MSDN文档

ClickOnce有点不同,因为它更多地基于ClickOnce版本#和URL路径,但我发现只要您继续“发布”到同一位置,新版本的应用程序将继续使用现有配置。(链接到ClickOnce如何处理更新

我也知道有一种方法可以在使用自定义安装脚本安装msi时手动合并配置,但我不记得执行它的确切步骤...(请参阅链接以了解如何使用Web进行操作。配置)


查看完整回答
反对 回复 2019-07-29
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

我想添加这个引用的文本作为我将来遇到此问题时的参考。据说,您可以通过调用Upgrade来指示ApplicationSettings基础结构复制先前版本的设置:

Properties.Settings.Value.Upgrade();

客户端设置常见问题的博客帖子:存档

问:为什么user.config路径中有版本号?如果我部署新版本的应用程序,用户是否会丢失以前版本保存的所有设置?

答:user.config路径对版本敏感的原因有很多。

(1)支持并行部署不同版本的应用程序(例如,您可以使用Clickonce执行此操作)。不同版本的应用程序可以保存不同的设置。

(2)升级应用程序时,设置类可能已被更改,可能与保存的内容不兼容,这可能会导致问题。

但是,我们可以轻松地将设置从先前版本的应用程序升级到最新版本。只需调用ApplicationSettingsBase.Upgrade(),它将从先前版本中检索与该类当前版本匹配的设置,并将它们存储在当前版本的user.config文件中。您还可以选择在设置类或提供程序实现中覆盖此行为。

问:好的,但我如何知道何时致电升级?

A:好问题。在Clickonce中,当您安装新版本的应用程序时,ApplicationSettingsBase将检测它并在加载点设置时自动升级设置。在非Clickonce案例中,没有自动升级 - 您必须自己调用升级。这是确定何时调用升级的一个想法:

有一个名为CallUpgrade的布尔设置,并给它一个默认值true。当您的应用启动时,您可以执行以下操作:

if (Properties.Settings.Value.CallUpgrade){
   Properties.Settings.Value.Upgrade();
   Properties.Settings.Value.CallUpgrade = false;    }

这将确保仅在部署新版本后第一次运行应用程序时调用Upgrade()。

我不相信它可以真正起作用的一秒钟 - 微软不可能提供这种能力,但方法也是如此。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 382 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信