C#如何判斷.Net?Framework版本是否滿足軟件運(yùn)行需要的版本
判斷.Net Framework版本是否滿足軟件運(yùn)行需要的版本
不直接運(yùn)行軟件,而是運(yùn)行一個(gè)引導(dǎo)程序,在引導(dǎo)程序里面判斷.Net Framework 的版本,滿足條件就啟動軟件,不滿足就提示用戶安裝.Net Framework
下面是如果確定用戶的電腦是4.0及以上,才可以使用的新方法,否則只能使用老的方法,一樣可以解決
各版本需要的 release 可以在微軟官方文檔中查到
/// <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("當(dāng)前缺少運(yùn)行環(huán)境,是否進(jìn)行安裝!\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"); }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C#編程中使用設(shè)計(jì)模式中的原型模式的實(shí)例講解
這篇文章主要介紹了C#編程中使用設(shè)計(jì)模式中的原型模式的實(shí)例講解,原型模式創(chuàng)建新對象方便快捷,而且可在運(yùn)行時(shí)根據(jù)需要通過克隆來添加和去除他們,也可在程序運(yùn)行是根據(jù)情況來修改類內(nèi)部的數(shù)據(jù),需要的朋友可以參考下2016-02-02c# Newtonsoft 六個(gè)值得使用的特性(上)
這篇文章主要介紹了c# Newtonsoft 六個(gè)值得使用的特性,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06c# 如何自己實(shí)現(xiàn)一個(gè)ORM框架
這篇文章主要介紹了c# 如何自己實(shí)現(xiàn)一個(gè)ORM,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03基于C#的UDP協(xié)議的同步通信實(shí)現(xiàn)代碼
本篇文章主要介紹了基于C#的UDP協(xié)議的同步實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02Unity技術(shù)手冊之Toggle切換使用實(shí)例
這篇文章主要為大家介紹了Unity技術(shù)手冊之Toggle切換使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11