请问用Delphi如何检测操作系统是否安装了.NETFramework(.NET框架)谢谢各位兄台!
解决立刻结算!!!

解决方案 »

  1.   

    转TheAres(班门斧)回复于 2002-12-10 10:50:16 得分 70判断注册表:   
      如果存在就认为是已经安装:   
      \LocalMachine\software\microsoft\.NetFrameWork   
        
      下面的   
      InstallRoot(=C:\WINDOWS\Microsoft.NET\Framework\)存放安装目录,不同的版本安装在不同的目录下.   
        
      Policy\v1.0\有版本信息.   
        
      同时,微软网站   
      http://www.microsoft.com/china/community/article.asp?oBODY=TechZone/TechArticle/TechDoc/deployNETApp&oXSLT=TechZone/TechArticle/TechContent   
      也有一篇关于使用C++来检测的文章,不过这篇文章在论坛中有些争议,你自己看看.
      

  2.   

    给你源码看看
    //----------------读注册表--------------------
    function reg_init():string;
    var ff:boolean;
       sqlstr,DBServerName,DBName,DBID,DBPwd:string;
       reg:TRegistry;
    begin
    try
     Reg:= TRegistry.Create;
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE ;
        if Reg.OpenKey('\Software\Microsoft\.NETFramework', false) then
        begin
          if Reg.ValueExists('InstallRoot')then
          begin
             DBServerName:=Reg.ReadString('InstallRoot');
          end;
          Reg.CloseKey;
         end;
        finally
            Reg.Free;
        end;
            result:=DBServerName;
        except on e:exception do
            showmessage(E.message);
        end;
        result:=DBServerName;
    end;
      

  3.   

    //遍历文件夹,查找'mscorlib.dll' 
    function EnumFileInQueue(path:PChar):boolean;
    var
        searchRec:TSearchRec;
        found:Integer;
        tmpStr:String;
        curDir:PChar;
        dirs:TQueue;
        f:boolean;
        i:Integer;
    begin
        i:=0;//查找结果(文件数)
        f:=false;
        dirs:=TQueue.Create;//创建目录队列
        dirs.Push(path);//将起始搜索路径入队
        curDir:=dirs.Pop;//出队
        {开始遍历,直至队列为空(即没有目录需要遍历)}
        while (curDir<> nil) do
        begin
            //加上搜索后缀,得到类似'c:\*.*' 、'c:\windows\*.*'的搜索路径
            tmpStr:=StrPas(curDir)+'\*.*';
            //在当前目录查找第一个文件、子目录
            found:=FindFirst(tmpStr,faAnyFile,searchRec);
            while found=0 do
            //找到了一个文件或目录后
            begin
                //如果找到的是个目录
                if (searchRec.Attr and faDirectory)<>0 then
                begin
                    {在搜索非根目录(C:\、D:\)下的子目录时会出现'.','..'的"虚拟目录"
                     大概是表示上层目录和下层目录吧要过滤掉才可以}
                    if (searchRec.Name <> '.') and (searchRec.Name <> '..') then
                    begin
                        {由于查找到的子目录只有个目录名,所以要添上上层目录的路径
                         searchRec.Name = 'Windows';
                         tmpStr:='c:\Windows';
                         加个断点就一清二楚了
                         }
                        tmpStr:=StrPas(curDir)+'\'+searchRec.Name;
                        {将搜索到的目录入队。让它先晾着。
                        因为TQueue里面的数据只能是指针,所以要把string转换为PChar
                        同时使用StrNew函数重新申请一个空间存入数据,否则会使已经进
                        入队列的指针指向不存在或不正确的数据(tmpStr是局部变量)。}
                        dirs.Push(StrNew(PChar(tmpStr)));
                    end;
                end
                //如果找到的是个文件
                else begin
                    {Result记录着搜索到的文件数。可是我是用CreateThread创建线程
                    来调用函数的,不知道怎么得到这个返回值我不想用全局变量}
                    i:=i+1;
                    //把找到的文件加到Memo控件
                    if  searchRec.Name = 'mscorlib.dll' then
                         f:=true;
                        //Form1.Label1.Caption :=  StrPas(curDir)+''+searchRec.Name;            end;
                //查找下一个文件或目录
                found:=FindNext(searchRec);
            end;
            {当前目录找到后,如果队列中没有数据,则表示全部找到了;
            否则就是还有子目录未查找,取一个出来继续查找。}
            if dirs.Count > 0 then
                curDir:=dirs.Pop
            else
                curDir:=nil;
        end;
        //释放资源
        dirs.Free;
        FindClose(searchRec);
        result:=f;
      end;
      

  4.   

    创建窗口之前进行判断
    Application.Initialize;
       path:=reg_init()+'v1.1.4322\';
       ff:= EnumFileInQueue(PChar(path));
       if  ff = true then
       begin
         open_exe();
         Application.Terminate;
       end
       else
       begin
        Application.CreateForm(TForm1, Form1);
        Application.Run;
      end;