首页 > 解决方案 > DeleteSubKey 以前的应用程序版本/s C#

问题描述

我的应用程序将用户设置写入注册表以便于检索,但这会引起一些头痛,因为它将它们写入为特定于版本的。

所以每次我更新我的应用程序时,它都会创建一个与新版本号相关的新子项。

设置写入注册表为:

Application.UserAppDataRegistry.SetValue

我想找到一种简单的方法来删除所有与当前应用程序版本不匹配的 VERSION 子项。

目前,因为我的应用程序相对较新,所以我使用了这个,它确实有效,但相当不整洁:

Registry.CurrentUser.DeleteSubKey("SOFTWARE\\COMPANY\\PRODUCT\\1.0.0.0", false);

Registry.CurrentUser.DeleteSubKey("SOFTWARE\\COMPANY\\PRODUCT\\1.0.10.0", false);

在上面的代码中,我故意删除了公司和产品信息,并且我的应用程序当前版本为 1.0.20.0,因此在应用程序启动时运行 DeleteSubKey 行,并且每次运行应用程序时都会运行它们。

我在想一些类似使用的东西:

If(PreviousVersion != Application.ProductVersion)
{
Registry.CurrentUser.DeleteSubKey(PreviousVersion);
}  

但我无法充实这一点。

另外,最好让它只运行一次,而不是在每次启动时运行。

标签: c#registryregistrykey

解决方案


您可以列出子项并检查它们是否与当前版本不同:

RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\COMPANY\\PRODUCT");
var keys = rk.GetSubKeyNames();

foreach (string s in keys)
{
   if (s != "Current_verion_number")
   {
      Registry.CurrentUser.DeleteSubKeyTree("SOFTWARE\\COMPANY\\PRODUCT\\" + s);
   }       
}

推荐阅读