当前位置:编程学习 > C#/ASP.NET >>

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

我写了一个程序,需要在 .NET Framework 3.5及以上平台上运行,我如何检测目标机器上是否已经安装了 .NET Framework呢?在线等!本人分不多,谢谢了。 C#  .NET Framework版本 --------------------编程问答-------------------- 这个你查注册表吧,比如 SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727 --------------------编程问答-------------------- C#程序来检测?
C#本身就需要framework,在没有framework的机器上如何检测? --------------------编程问答-------------------- 你用c++或delphi、vb等程序来检测吧,查注册表,framework版本信息都在注册表里 --------------------编程问答-------------------- 你要用.net写一个程序检查目标机器上有没有安装.net?

前提是: 如果目标机器上没有安装.net, 你的检测程序根本就运行不起来,更别谈上它检测了

不过你可以用非托管的代码来写个引导程序,如C++ 来检测一下注册表就知道了

很久之前倒是用C++搞过一个类似的引导程序,发你参考一下思路吧:

http://download.csdn.net/detail/q107770540/4753895 --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
这个你查注册表吧,比如 SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727


能给个具体代码么。。。没弄过啊。 --------------------编程问答--------------------
引用 2 楼 gxingmin 的回复:
C#程序来检测?
C#本身就需要framework,在没有framework的机器上如何检测?


那如何检测已安装的 .NET Framework版本? --------------------编程问答--------------------
引用 4 楼 q107770540 的回复:
你要用.net写一个程序检查目标机器上有没有安装.net?

前提是: 如果目标机器上没有安装.net, 你的检测程序根本就运行不起来,更别谈上它检测了

不过你可以用非托管的代码来写个引导程序,如C++ 来检测一下注册表就知道了

很久之前倒是用C++搞过一个类似的引导程序,发你参考一下思路吧:

http://download.csdn.net/det……


哎,小弟学艺不精,不知道C++的代码该怎么跟C#的代码一起使用,不过我觉得这个思路是能走通的,谢谢。 --------------------编程问答-------------------- 参考 --------------------编程问答-------------------- 用 C++ 的程序来调用 C# 的

C++ 先运行并检测。

if( .NET Framework版本 符合要求 )
运行 C# 程序

最后,退出 C++ --------------------编程问答--------------------
引用 8 楼 yysyangyangyangshan 的回复:
参考


谢谢,解决了。 --------------------编程问答--------------------
引用 9 楼 keith_cheung 的回复:
用 C++ 的程序来调用 C# 的

C++ 先运行并检测。

if( .NET Framework版本 符合要求 )
运行 C# 程序

最后,退出 C++


没见过怎么弄 。。 --------------------编程问答-------------------- 添加app.config,里面增加:
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>
--------------------编程问答--------------------
引用 楼主 sixiangdelei 的回复:
我写了一个程序,需要在 .NET Framework 3.5及以上平台上运行,我如何检测目标机器上是否已经安装了 .NET Framework呢?在线等!本人分不多,谢谢了。 
C#  .NET Framework版本

儿子如何生老子? --------------------编程问答-------------------- 除 --------------------编程问答--------------------

        //C#获取已安装 .NET Framework 版本
        public string[] GetDotNetVersions()
        {
            DirectoryInfo[] directories = new DirectoryInfo(Environment.SystemDirectory + @"\..\Microsoft.NET\Framework").GetDirectories("v?.?.*");
            ArrayList list = new ArrayList();
            foreach (DirectoryInfo info2 in directories)
            {
                list.Add(info2.Name.Substring(1));
            }
            return (list.ToArray(typeof(string)) as string[]);
        }
--------------------编程问答--------------------
引用 8 楼 yysyangyangyangshan 的回复:
参考

+1 --------------------编程问答--------------------
引用 15 楼 zhanghb0604 的回复:
C# code?1234567891011        //C#获取已安装 .NET Framework 版本        public string[] GetDotNetVersions()        {            DirectoryInfo[] directories = new DirectoryInfo(Environment.SystemD……


这个貌似不对。。得判断install的值。 --------------------编程问答-------------------- 还是做安装包比较简单吧 --------------------编程问答--------------------
引用 18 楼 assky124 的回复:
还是做安装包比较简单吧


程序总共不到3M,打个framework 3.5的安装包230M,有点不划算啊。 --------------------编程问答-------------------- 安装包勾选依赖库版本.
别人装你的程序的时候会检测.没有会自动提示到哪里下载.或者直接打包  Framework 到你的安装包里.自动安装. --------------------编程问答-------------------- 4.0 40M --------------------编程问答-------------------- 写个 bat 检查  --------------------编程问答--------------------
引用 2 楼 gxingmin 的回复:
C#程序来检测?
C#本身就需要framework,在没有framework的机器上如何检测?


正确。先有鸡还是先有蛋的问题。如果你的“检测程序”能跑起来,那就无需检测了。 --------------------编程问答-------------------- --------------------编程问答-------------------- C:\Windows\Microsoft.NET\Framework 文件夹下 各个版本的文件夹都有

若是说要用C#程序检查,那纯粹吃饱了撑的。

C#本身就是在NET平台上运行的,嫌NET太大,就别用C#。
何况现在WIN7 WIN8都是自带3.5以上的。 --------------------编程问答-------------------- 这个不需要你玩,微软写好了。

不信你找台木装net滴机子,一运行他就会提示 need net 框架xx --------------------编程问答-------------------- 你在将代码打包成软件的过程中,会有这个选项的,你说的这个功能是不需要自己实现的 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 26 楼 wanghui0380 的回复:
这个不需要你玩,微软写好了。

不信你找台木装net滴机子,一运行他就会提示 need net 框架xx

如果目标机器上的框架版本不一至,
都会提示的,
这个不用你担心, --------------------编程问答-------------------- 解决方案:
安装包
找一个软件包免安装.netframework的,自己google。

另,如果你的问题是检测安装的版本是否符合的话,可以参考ls的答案。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 26 楼 wanghui0380 的回复:
这个不需要你玩,微软写好了。

不信你找台木装net滴机子,一运行他就会提示 need net 框架xx


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



--------------------编程问答--------------------
引用 26 楼 wanghui0380 的回复:
这个不需要你玩,微软写好了。

不信你找台木装net滴机子,一运行他就会提示 need net 框架xx
--------------------编程问答--------------------  好东西啊,楼主再接再厉啊d(^o^)b --------------------编程问答-------------------- 新建一个安装项目,属性中系统必备从微软网站上下载。

感觉你根本就不知道怎么做安装项目,网上搜索下,自己扫扫盲 --------------------编程问答-------------------- 如果不想使用本地语言的话,可以考虑用.NET低版本的程序检测.NET版本状况。只要对方装有.NET就行了,不管什么版本。 --------------------编程问答-------------------- 你编一个 MFC ( C++ ) 程序,它是可以在 windows 系统里运行的。
在这个 MFC 里你检测你系统的 .NET Framework 版本?
如果符合版本要求,你在 MFC 里,调用你的 C# 程序来运行,这样就可以了。

如下就是 VS2010中MFC调用 记事本的命令:
void CDlgPl5::OnBnClickedFilenameOpen()
{
UpdateData(TRUE);
CString STemp( _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滴机子,一运行他就会提示 need net 框架xx


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





呵呵,这真是对某个自以为很牛的“牛人”的响亮的一巴掌。别整天自己觉得牛逼哄哄的,是个什么东西都不知道。 --------------------编程问答--------------------
引用 4 楼 q107770540 的回复:
你要用.net写一个程序检查目标机器上有没有安装.net?

前提是: 如果目标机器上没有安装.net, 你的检测程序根本就运行不起来,更别谈上它检测了

不过你可以用非托管的代码来写个引导程序,如C++ 来检测一下注册表就知道了

很久之前倒是用C++搞过一个类似的引导程序,发你参考一下思路吧:

http://download.csdn.net/detail/q107770540/4753895


感觉 楼主 好有 意思 哦  --------------------编程问答-------------------- 引用别人的代码
原地址
http://www.cnblogs.com/liulun/archive/2009/12/18/1627313.html希望对你有,帮助。 

#include <stdio.h>
#include <windows.h>
#include <iostream>

using namespace std;

int CheckReg()
{
    LPSTR regeditStr = "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v3.5";//现在能判断是不是3.5,但不确定是不是3.5 SP1    
    HKEY ck;//注册表的键
    if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,regeditStr,0,KEY_ALL_ACCESS,&ck))//检查注册表是否存在这个键值
    {
        RegCloseKey(ck);//关闭注册表
        cout<<"他的系统里安装了.net3.5,可以执行你的安装包了"<<endl;
        return 1;
    }
    else
    {
        cout<<"他的系统里没安装.net3.5,现在开始安装!"<<endl;
        return 0;
    }
}

int StartExe(LPSTR path)
{
        STARTUPINFO stinfo;//当创建新进程时,将使用该结构的有关成员
        ZeroMemory((void*)&stinfo,   sizeof(STARTUPINFO));//把stinfo置空
        PROCESS_INFORMATION   ProcessInfo;//进程信息的数据结构
        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))
        {
              //DWORD dwRet = GetLastError();//启动失败,获取异常值
            return 0;
        }
        else
        {
            WaitForSingleObject(ProcessInfo.hProcess, INFINITE);//等待安装完成,此方法为阻塞方法!
            return 1;
        }
}

int StartCheck()
{
    LPSTR sNetfile   =   "C:\\Program Files\\NetMeeting\\conf.exe";   //你的.net安装包的路径
    LPSTR sExefile   =   "C:\\Program Files\\Google\\Google Pinyin 2\\GooglePinyinSettingWizard.exe";   //你的程序的路径
    if(CheckReg())
    {        
        StartExe(sExefile);
        cout<<"安装完成"<<endl;
    }
    else
    {
        StartExe(sNetfile);
        StartCheck();
    }
    return 1;
}

int main(void)
{    
    StartCheck();
    char a;
    cin>>a;
    return 0;
} --------------------编程问答--------------------
引用 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的人先自己回去试试
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,