首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请教用Delphi怎么检测操作系统是否安装了.NETFramework(.NET框架)

2012-02-25 
请问用Delphi如何检测操作系统是否安装了.NETFramework(.NET框架)请问用Delphi如何检测操作系统是否安装了

请问用Delphi如何检测操作系统是否安装了.NETFramework(.NET框架)
请问用Delphi如何检测操作系统是否安装了.NETFramework(.NET框架)

谢谢各位兄台!
解决立刻结算!!!

[解决办法]


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++来检测的文章,不过这篇文章在论坛中有些争议,你自己看看.

[解决办法]
给你源码看看
//----------------读注册表--------------------
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;
[解决办法]
//遍历文件夹,查找 '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;
[解决办法]
创建窗口之前进行判断
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;

热点排行