日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#如何判斷.Net?Framework版本是否滿足軟件運行需要的版本_C#教程

作者:智障俠 ? 更新時間: 2023-03-20 編程語言

判斷.Net Framework版本是否滿足軟件運行需要的版本

不直接運行軟件,而是運行一個引導程序,在引導程序里面判斷.Net Framework 的版本,滿足條件就啟動軟件,不滿足就提示用戶安裝.Net Framework

下面是如果確定用戶的電腦是4.0及以上,才可以使用的新方法,否則只能使用老的方法,一樣可以解決

各版本需要的 release 可以在微軟官方文檔中查到

https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed#net_b

        /// <summary>
        /// 判斷.Net Framework的Release是否符合需要
        /// (.Net Framework 版本在4.0及以上)
        /// </summary>
        /// <param name="release">需要的版本 version = 4.5 release = 379893</param>
        /// <returns></returns>
        private static bool GetDotNetRelease(int release)
        {
            const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
            using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
            {
                if (ndpKey != null && ndpKey.GetValue("Release") != null)
                {
                    return (int)ndpKey.GetValue("Release") >= release ? true : false;
                }
                return false;
            }
        }

老的方法,支持2.0及以上

        /// <summary>
        /// 判斷.Net Framework的Version是否符合需要
        /// (.Net Framework 版本在2.0及以上)
        /// </summary>
        /// <param name="version">需要的版本 version = 4.5</param>
        /// <returns></returns>
        private static bool GetDotNetVersion(string version)
        {
            string oldname = "0";
            using (RegistryKey ndpKey =
                RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "").
                OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
            {
                foreach (string versionKeyName in ndpKey.GetSubKeyNames())
                {
                    if (versionKeyName.StartsWith("v"))
                    {
                        RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
                        string newname = (string)versionKey.GetValue("Version", "");
                        if (string.Compare(newname, oldname) > 0)
                        {
                            oldname = newname;
                        }
                        if (newname != "")
                        {
                            continue;
                        }
                        foreach (string subKeyName in versionKey.GetSubKeyNames())
                        {
                            RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
                            newname = (string)subKey.GetValue("Version", "");
                            if (string.Compare(newname, oldname) > 0)
                            {
                                oldname = newname;
                            }
                        }
                    }
                }
            }
            return string.Compare(oldname, version) > 0 ? true : false;
        }

最后將判斷的代碼放在Main方法里

        static void Main(string[] args)
        {
            if (!GetDotNetVersion("4.5"))
            {
                if (MessageBox.Show("當前缺少運行環境,是否進行安裝!\r\n\r\n安裝完成后將自動啟動軟件", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
                    return;
                Process.Start(@"_framework4.5.2.exe").WaitForExit(); //一直等待,直到Framework安裝完成
                if (GetDotNetVersion("4.5"))
                    Process.Start(@"你的程序.exe");
            }
            else
                Process.Start(@"你的程序.exe");
        }

總結

原文鏈接:https://blog.csdn.net/sun_zeliang/article/details/81479775

欄目分類
最近更新