C# 通过注册表修改程序版本号

2023年10月23日 844点热度 0人点赞 0条评论
内容纲要

file

自家的软件安装后,需要更新,更新文件完成后还需要修改注册表中关于程序的版本号。

软件安装后,会被写入注册表中。

file

所以只需要修改注册表的 DisplayVersion 即可,不同的程序可能还需要修改其它属性,例如 Version、DisplayName。

修改注册表可能需要管理员权限,这要看软件是安装到所有人可以使用,还是仅当前用户可以使用。

每个程序的 KEY 都是不同的,需要自行拼接。
file


        static void Main(string[] args)
        {
            string code = "4444-4444-4444-4444-4444";
            SearchRegistryKeys(code, new Version(1, 6, 6, 6));
            Console.ReadKey();
        }

        [SupportedOSPlatform("windows")]
        static bool SearchRegistryKeys(string guid, Version newVersion)
        {
            const string LocalMachine = "SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{0}";
            const string CurrentUser = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{0}";
            try
            {
                // 打开指定的子键
                RegistryKey? baseKey = Registry.LocalMachine.OpenSubKey(string.Format(LocalMachine, guid),writable: true);
                if (baseKey == null)
                {
                    baseKey = Registry.CurrentUser.OpenSubKey(string.Format(CurrentUser, guid),writable: true);
                }

                if (baseKey == null) return false;

                // 获取所有子键的名称
                string[] kvs = baseKey.GetValueNames();
                if (kvs.Any(x => x == "DisplayVersion"))
                {
                    var version = baseKey.GetValue("DisplayVersion")?.ToString();
                    if (version == null) return false;
                    baseKey.SetValue("DisplayVersion", newVersion.ToString());
                    var name = baseKey.GetValue("DisplayName")?.ToString();
                    if (name == null) return false;
                    baseKey.SetValue("DisplayName", name.Replace(version, newVersion.ToString()));
                }
                baseKey.Dispose();
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return false;
            }
        }

痴者工良

高级程序员劝退师

文章评论