c# - 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);
}
但我无法充实这一点。
另外,最好让它只运行一次,而不是在每次启动时运行。
解决方案
您可以列出子项并检查它们是否与当前版本不同:
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);
}
}
推荐阅读
- python - Conda 环境安装在错误的文件夹中?
- c++ - 如何通过 V2 Credential Provider 中的 GetSerialization 函数提交生物认证数据?
- javascript - 无法找出为什么该值未定义
- python-asyncio - asyncio.get_event_loop().run_until_complete(asyncio.sleep(1)) 是什么意思
- python - 如何使用 Django 将 postgresql 连接到 aws RDS
- ios - iOS - node-applesign:应用程序共享扩展辞职不起作用
- python - 序数逻辑回归:R vs python等价
- angular - Angular如何添加多个对象而不是覆盖到localStorage
- node.js - 创建离子项目时的Npm问题
- react-native - react-native-open-map 库不工作