如何用C#检测系统是否安装了 .NET Framework以及安装的版本?

问题描述

我写了一个程序,需要在.NETFramework3.5及以上平台上运行,我如何检测目标机器上是否已经安装了.NETFramework呢?在线等!本人分不多,谢谢了。

解决方案

解决方案二:
这个你查注册表吧,比如SOFTWAREMicrosoftNETFrameworkSetupNDPv2.0.50727
解决方案三:
C#程序来检测?C#本身就需要framework,在没有framework的机器上如何检测?
解决方案四:
你用c++或delphi、vb等程序来检测吧,查注册表,framework版本信息都在注册表里
解决方案五:
你要用.net写一个程序检查目标机器上有没有安装.net?前提是:如果目标机器上没有安装.net,你的检测程序根本就运行不起来,更别谈上它检测了不过你可以用非托管的代码来写个引导程序,如C++来检测一下注册表就知道了很久之前倒是用C++搞过一个类似的引导程序,发你参考一下思路吧:http://download.csdn.net/detail/q107770540/4753895
解决方案六:
引用1楼bdmh的回复:

这个你查注册表吧,比如SOFTWAREMicrosoftNETFrameworkSetupNDPv2.0.50727

能给个具体代码么。。。没弄过啊。
解决方案七:
引用2楼gxingmin的回复:

C#程序来检测?C#本身就需要framework,在没有framework的机器上如何检测?

那如何检测已安装的.NETFramework版本?
解决方案八:
引用4楼q107770540的回复:

你要用.net写一个程序检查目标机器上有没有安装.net?前提是:如果目标机器上没有安装.net,你的检测程序根本就运行不起来,更别谈上它检测了不过你可以用非托管的代码来写个引导程序,如C++来检测一下注册表就知道了很久之前倒是用C++搞过一个类似的引导程序,发你参考一下思路吧:http://download.csdn.net/det……

哎,小弟学艺不精,不知道C++的代码该怎么跟C#的代码一起使用,不过我觉得这个思路是能走通的,谢谢。
解决方案九:

解决方案十:
用C++的程序来调用C#的C++先运行并检测。if(.NETFramework版本符合要求)运行C#程序最后,退出C++
解决方案十一:
引用8楼yysyangyangyangshan的回复:

参考

谢谢,解决了。
解决方案十二:
引用9楼keith_cheung的回复:

用C++的程序来调用C#的C++先运行并检测。if(.NETFramework版本符合要求)运行C#程序最后,退出C++

没见过怎么弄。。
解决方案十三:
添加app.config,里面增加:<configuration><startup><supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.0"/></startup></configuration>

解决方案十四:
引用楼主sixiangdelei的回复:

我写了一个程序,需要在.NETFramework3.5及以上平台上运行,我如何检测目标机器上是否已经安装了.NETFramework呢?在线等!本人分不多,谢谢了。C#.NETFramework版本

儿子如何生老子?
解决方案十五:

解决方案:
//C#获取已安装.NETFramework版本publicstring[]GetDotNetVersions(){DirectoryInfo[]directories=newDirectoryInfo(Environment.SystemDirectory+@"..Microsoft.NETFramework").GetDirectories("v?.?.*");ArrayListlist=newArrayList();foreach(DirectoryInfoinfo2indirectories){list.Add(info2.Name.Substring(1));}return(list.ToArray(typeof(string))asstring[]);}

解决方案:
引用8楼yysyangyangyangshan的回复:

参考

+1
解决方案:
引用15楼zhanghb0604的回复:

C#code?1234567891011//C#获取已安装.NETFramework版本publicstring[]GetDotNetVersions(){DirectoryInfo[]directories=newDirectoryInfo(Environment.SystemD……

这个貌似不对。。得判断install的值。
解决方案:
还是做安装包比较简单吧
解决方案:
引用18楼assky124的回复:

还是做安装包比较简单吧

程序总共不到3M,打个framework3.5的安装包230M,有点不划算啊。
解决方案:
安装包勾选依赖库版本.别人装你的程序的时候会检测.没有会自动提示到哪里下载.或者直接打包Framework到你的安装包里.自动安装.
解决方案:
4.040M
解决方案:
写个bat检查
解决方案:
引用2楼gxingmin的回复:

C#程序来检测?C#本身就需要framework,在没有framework的机器上如何检测?

正确。先有鸡还是先有蛋的问题。如果你的“检测程序”能跑起来,那就无需检测了。
解决方案:
本帖最后由 caozhy 于 2013-03-06 19:33:57 编辑
解决方案:
C:WindowsMicrosoft.NETFramework文件夹下各个版本的文件夹都有若是说要用C#程序检查,那纯粹吃饱了撑的。C#本身就是在NET平台上运行的,嫌NET太大,就别用C#。何况现在WIN7WIN8都是自带3.5以上的。
解决方案:
这个不需要你玩,微软写好了。不信你找台木装net滴机子,一运行他就会提示neednet框架xx
解决方案:
你在将代码打包成软件的过程中,会有这个选项的,你说的这个功能是不需要自己实现的
解决方案:

解决方案:
引用26楼wanghui0380的回复:

这个不需要你玩,微软写好了。不信你找台木装net滴机子,一运行他就会提示neednet框架xx

如果目标机器上的框架版本不一至,都会提示的,这个不用你担心,
解决方案:
解决方案:安装包找一个软件包免安装.netframework的,自己google。另,如果你的问题是检测安装的版本是否符合的话,可以参考ls的答案。
解决方案:
该回复于2013-03-07 09:28:53被版主删除
解决方案:
引用26楼wanghui0380的回复:

这个不需要你玩,微软写好了。不信你找台木装net滴机子,一运行他就会提示neednet框架xx

没安装.net的机器这么提示的。
解决方案:
引用26楼wanghui0380的回复:

这个不需要你玩,微软写好了。不信你找台木装net滴机子,一运行他就会提示neednet框架xx

解决方案:
好东西啊,楼主再接再厉啊d(^o^)b
解决方案:
新建一个安装项目,属性中系统必备从微软网站上下载。感觉你根本就不知道怎么做安装项目,网上搜索下,自己扫扫盲
解决方案:
如果不想使用本地语言的话,可以考虑用.NET低版本的程序检测.NET版本状况。只要对方装有.NET就行了,不管什么版本。
解决方案:
你编一个MFC(C++)程序,它是可以在windows系统里运行的。在这个MFC里你检测你系统的.NETFramework版本?如果符合版本要求,你在MFC里,调用你的C#程序来运行,这样就可以了。如下就是VS2010中MFC调用记事本的命令:voidCDlgPl5::OnBnClickedFilenameOpen(){UpdateData(TRUE);CStringSTemp(_T("notepad"+"aa.txt"));USES_CONVERSION;char*Str=T2A(STemp.GetBuffer());//系统宏T2A(W2A)STemp.ReleaseBuffer();WinExec(Str,SW_SHOW);}
解决方案:
直接写C#的Hello,World,如果运行不了那就是没装framework了
解决方案:
引用2楼gxingmin的回复:

C#程序来检测?C#本身就需要framework,在没有framework的机器上如何检测?

sp..........
解决方案:
看到版主说人家脑残就不对,有很多用程序的人不懂,你要明确的告诉人家,缺乏什么呀,是运行库吗,还是电脑有问题,我在单位上就有MM在问怎么回事。切
解决方案:
引用32楼sixiangdelei的回复:

Quote: 引用26楼wanghui0380的回复:
这个不需要你玩,微软写好了。不信你找台木装net滴机子,一运行他就会提示neednet框架xx

没安装.net的机器这么提示的。

呵呵,这真是对某个自以为很牛的“牛人”的响亮的一巴掌。别整天自己觉得牛逼哄哄的,是个什么东西都不知道。
解决方案:
引用4楼q107770540的回复:

你要用.net写一个程序检查目标机器上有没有安装.net?前提是:如果目标机器上没有安装.net,你的检测程序根本就运行不起来,更别谈上它检测了不过你可以用非托管的代码来写个引导程序,如C++来检测一下注册表就知道了很久之前倒是用C++搞过一个类似的引导程序,发你参考一下思路吧:http://download.csdn.net/detail/q107770540/4753895

感觉楼主好有意思哦
解决方案:
引用别人的代码原地址希望对你有,帮助。#include<stdio.h>#include<windows.h>#include<iostream>usingnamespacestd;intCheckReg(){LPSTRregeditStr="SOFTWARE\Microsoft\NETFrameworkSetup\NDP\v3.5";//现在能判断是不是3.5,但不确定是不是3.5SP1HKEYck;//注册表的键if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_LOCAL_MACHINE,regeditStr,0,KEY_ALL_ACCESS,&ck))//检查注册表是否存在这个键值{RegCloseKey(ck);//关闭注册表cout<<"他的系统里安装了.net3.5,可以执行你的安装包了"<<endl;return1;}else{cout<<"他的系统里没安装.net3.5,现在开始安装!"<<endl;return0;}}intStartExe(LPSTRpath){STARTUPINFOstinfo;//当创建新进程时,将使用该结构的有关成员ZeroMemory((void*)&stinfo,sizeof(STARTUPINFO));//把stinfo置空PROCESS_INFORMATIONProcessInfo;//进程信息的数据结构stinfo.cb=sizeof(STARTUPINFO);//包含STARTUPINFO结构中的字节数stinfo.dwFlags=STARTF_USESHOWWINDOW;//显示窗口stinfo.wShowWindow=SW_SHOW;//该应用程序的第一个重叠窗口应该如何出现if(!CreateProcess(path,path,NULL,NULL,false,0,NULL,NULL,&stinfo,&ProcessInfo)){//DWORDdwRet=GetLastError();//启动失败,获取异常值return0;}else{WaitForSingleObject(ProcessInfo.hProcess,INFINITE);//等待安装完成,此方法为阻塞方法!return1;}}intStartCheck(){LPSTRsNetfile="C:\ProgramFiles\NetMeeting\conf.exe";//你的.net安装包的路径LPSTRsExefile="C:\ProgramFiles\Google\GooglePinyin2\GooglePinyinSettingWizard.exe";//你的程序的路径if(CheckReg()){StartExe(sExefile);cout<<"安装完成"<<endl;}else{StartExe(sNetfile);StartCheck();}return1;}intmain(void){StartCheck();chara;cin>>a;return0;}
解决方案:
引用2楼gxingmin的回复:

C#程序来检测?C#本身就需要framework,在没有framework的机器上如何检测?

+1
解决方案:
我决定现在的人是不是有点特别歧视C#?你们找个xp以上的系统没装.netframework的机器给我看看?一般我们搞这些无非就是做个安装包检测一下是否安装了没安装就安装一下。安装程序完全可以使用2.0版本写,就这么个事情,有必要在这里说些没意义的事情吗?就算我们不能用netframework写个安装包我不能用其他程序写安装包吗?
解决方案:
这个有点不现实!环境都没有怎么运行winform程序呢除非用其他语言
解决方案:
楼上有位说的对,C#写的检测程序本身就要在.NetFramework上面才能运行,你如何检测呢,用MFC吧,我就写过MFC的小应用程序,检测机器上是否安装了.Net,如果安装了列出已经安装的所有.Net版本。
解决方案:
你没有装.net,软件连运行都运行不起来,还用c#去检测?不可行!!1.可以用c++判断,装了的话启动c#目标程序2.安装包,用安装包编写检测代码。
解决方案:
你们到底试过没有呢?具体会怎么提示?如果你在app.config里面没有指定.net版本,那么直接就给你冒这么个东西出来这东西啥玩意?你让经常使用电脑的人(这里不说电脑小白)来告诉我这是啥玩意?客户他懂个P啊,他只知道你这程序不能运行,况且上面这提示对于普通人来说是真心太专业了,就算你非常友好的提示客户他也不见得懂只要你电脑上装了.net,不管哪个版本的,只要你app.config里面没有指定,他就能运行,只不过运行出错而已上面这错误一般的客户谁看得懂啊?说别人NC的人先自己回去试试
解决方案:
我估計樓主的意思應該是說,用戶機器上有安裝.NetFrameWork,但是版本過低,不能運行樓主的WinForm程式,所以想要在運行啟動時先檢查本機.NetFrameWork版本,如果達不到則執行安裝或提醒

时间: 2024-11-04 04:05:07

如何用C#检测系统是否安装了 .NET Framework以及安装的版本?的相关文章

apt-ubuntu下入侵检测系统snort的安装问题

问题描述 ubuntu下入侵检测系统snort的安装问题 按照网上的教程安装,但总是碰到一些东西用apt-get install找不到软件包的,不知道是什么情况,请大神指导一下 解决方案 可能源改变了,不然就要下载源码来编译安装了 解决方案二: 哪些是用apt-get install找不到软件包的,贴出来.或在网上搜索一下.

如何在 Linux 系统上安装 Suricata 入侵检测系统

如何在 Linux 系统上安装 Suricata 入侵检测系统 随着安全威胁的不断发生,入侵检测系统(IDS)在如今的数据中心环境中显得尤为必要.然而,随着越来越多的服务器将他们的网卡升级到10GB/40GB以太网,对如此线路上的硬件进行计算密集型的入侵检测越来越困难.其中一种提升入侵检测系统性能的途径是多线程入侵检测系统,它将 CPU 密集型的深度包检测工作并行的分配给多个并发任务来完成.这样的并行检测可以充分利用多核硬件的优势来轻松提升入侵检测系统的吞吐量.在这方面有两个知名的开源项目,分别

教程-关于ubuntu中安装入侵检测系统snort的问题

问题描述 关于ubuntu中安装入侵检测系统snort的问题 在安装snort的时候按照网上的教程一步一步来,结果碰到下面的情况,请指导一下 解决方案 系统管理->更新管理器->软件源里面,看看源有没有勾上 解决方案二: 缺少对应的源.或者下载源码来编译

如何用wifi-linux检测AP信号强度

如何用wifi-linux检测AP信号强度 作为一名python极客,我喜欢在github上挖掘新的用于linux用户的python工具.今天我发现了一款用python写成的用于检测AP信号强度的工具:wifi-linux. 我已经在wifi-linux上实验了大约两个小时,并且它工作的很好,但是我希望在不久的将来在作者那里看到一些单元测试,因为命令plot无法在我的电脑上工作,并且会导致一些问题. 什么是wifi-linux 根据github上作者账号的官方的 readme.md文件, wif

Linux有问必答:如何用Perl检测Linux的发行版本

Linux有问必答:如何用Perl检测Linux的发行版本 提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码.为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu.CentOS.Debian.Fedora等等),以及它是什么版本号.如何用Perl检测Linux的发行版本? 如果要用Perl脚本检测Linux的发行版,你可以使用一个名为Linux::Distribution的Perl模块.该模块通过检查/etc/lsb-release以及其他在/etc下的

snort+base搭建IDS入侵检测系统

Snort是美国Sourcefire公司开发的发布在GPL v2下的IDS(Intrusion Detection System)软件 Snort有 三种工作模式:嗅探器.数据包记录器.网络入侵检测系统模式.嗅探器模式仅仅是从网络上读取数据包并作为连续不断的流显示在终端上.数据包记录器模式把数 据包记录到硬盘上.网路入侵检测模式分析网络数据流以匹配用户定义的一些规则,并根据检测结果采取一定的动作.网络入侵检测系统模式是最复杂的,而且是可 配置的. Snort可以用来监测各种数据包如端口扫描等之外

无线入侵检测系统

现在随着黑客技术的提高,无线局域网 (WLANs)受到越来越多的威胁.配置无线基站(WAPs)的失误导致会话劫持以及拒绝服务攻击(Dos)都象瘟疫一般影响着无线局域网的安全.无线网络不但因为基于传统有线网络TCP/IP架构而受到攻击,还有可能受到基于电气和电子工程师协会(IEEE)发行802.11标准本身的安全问题而受到威胁.为了更好的检测和防御这些潜在的威胁,无线局域网也使用了一种入侵检测系统(IDS)来解决这个问题.以至于没有配置入侵检测系统的组织机构也开始考虑配置IDS的解决方案.这篇文章

如何用驱动人生系统的解决扫描仪驱动问题

  在日常生活中,童鞋们接触打印机的机会比较多,但扫描仪却是在办公场所使用较多的.扫描仪驱动为什么安装不上?扫描仪无法进行图像扫描?遇到这些问题时是否会一筹莫展?下面让小编来系统的为大家讲解遇到这类问题时该如何解决. 方法一,使用驱动人生检测安装扫描仪驱动.当你的电脑需要连接扫描仪时,首先可以使用驱动人生检测扫描仪,查找匹配的驱动.驱动人生拥有多种品牌扫描仪驱动,并也提供万能扫描仪驱动下载.所以不管你的扫描仪是什么品牌,驱动人生都能智能匹配最合适的扫描仪驱动程序.打开驱动人生,一键检测驱动,如能

谷歌发布基于机器学习的Android APP安全检测系统:Google Play Protect

Google Play作为众所周知的在线应用市场,因为审查制度的松散,经常会有一些恶意软件伪装成其他应用混入其中.此前阿里聚安全小编就报道了2例关于恶意软件伪装在Google Play上的事件:<Google Play商店的"系统更新"隐藏间谍软件,数百万用户中招>和<打开手机电筒就泄露了银行卡密码?>.一旦用户从应用市场下载APP到手机上后,谷歌便无法监视和检测应用程序的恶意行为. 近日,谷歌为Android用户带来了一个好消息.在Google I/O2017