问题描述
我写了一个程序,需要在.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版本,如果達不到則執行安裝或提醒