windows xp自带.net framework1.0
windows vista自带.net framework 3.0、2.0
windows 7自带.net framework 3.5、3.0、2.0
windows 8自带.net framework4.5、4.0
总结以上信息,在打包软件的时候,编写脚本就能灵活判断framework版本,分配不同的exe文件,从而大大减少了安装庞大的framework。这是我们.net程序员的福音。
以下是判断framework版本的部分代码:
var Version: TWindowsVersion;
S: String;
//-----------------------------------------------------------
// donet40Not (集成x86,x64)
//------------------------------------------------------------
function Net40NotExist(): Boolean;
begin
GetWindowsVersionEx(Version);
if (Version.Major = 6) and (Version.Minor = 2) or (Version.Build=9200) then //windows 8
begin
FileCopy(ExpandConstant('{app}\dotNet40\KoPa Capture.exe'),ExpandConstant('{app}\KoPa Capture.exe'),False); //copy
DeleteFile(ExpandConstant('{app}\dotNet40\KoPa Capture.exe'));
FileCopy(ExpandConstant('{app}\dotNet40\OstecPhotoAlbum.dll'),ExpandConstant('{app}\OstecPhotoAlbum.dll'),False); //copy
DeleteFile(ExpandConstant('{app}\dotNet40\OstecPhotoAlbum.dll'));
Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0');
//function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;
Exit;
end;
end;
//------------------------------------------------------/
// donet20Not x86
//------------------------------------------------------/
function Net20NotExist():Boolean;
begin
GetWindowsVersionEx(Version);
if (Version.Major = 5) and (Version.Minor = 1) then //windows XP
begin
FileCopy(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'),ExpandConstant('{app}\KoPa Capture.exe'),False);
DeleteFile(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'));
FileCopy(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'),ExpandConstant('{app}\OstecPhotoAlbum.dll'),False); //copy
DeleteFile(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'));
Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727');
Exit;
end;
if (Version.Major = 6) and (Version.Minor = 0) then //windows vista
begin
FileCopy(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'),ExpandConstant('{app}\KoPa Capture.exe'),False);
DeleteFile(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'));
FileCopy(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'),ExpandConstant('{app}\OstecPhotoAlbum.dll'),False); //copy
DeleteFile(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'));
Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727');
Exit;
end;
if (Version.Major = 6) and (Version.Minor = 1) then //windows 7
begin
FileCopy(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'),ExpandConstant('{app}\KoPa Capture.exe'),False);
DeleteFile(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'));
FileCopy(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'),ExpandConstant('{app}\OstecPhotoAlbum.dll'),False); //copy
DeleteFile(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'));
Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727');
Exit;
end;
end;
//-------------------------------------------------------/
// donet20_XP_x64Not x64
//-------------------------------------------------------/
function Net20X64NotExist():Boolean;
begin
GetWindowsVersionEx(Version);
if (Version.Major = 5) and (Version.Minor = 2) and (Version.ServicePackMajor < 2) then //Windows Server 2003或 Windows XP x64 版本 (AMD64/EM64T)或 Windows XP 64 位版本 (Itanium)
begin
FileCopy(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'),ExpandConstant('{app}\KoPa Capture.exe'),False);
DeleteFile(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'));
FileCopy(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'),ExpandConstant('{app}\OstecPhotoAlbum.dll'),False); //copy
DeleteFile(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'));
Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727');
Exit;
end;
//-----------------------------------------------------/
// donot20_Win7_x64Not x64
//-----------------------------------------------------/
if (Version.Major = 6) and (Version.Minor = 1) and (Version.ServicePackMajor < 2) then //Windows 7
begin
FileCopy(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'),ExpandConstant('{app}\KoPa Capture.exe'),False);
DeleteFile(ExpandConstant('{app}\dotNet20\KoPa Capture.exe'));
FileCopy(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'),ExpandConstant('{app}\OstecPhotoAlbum.dll'),False); //copy
DeleteFile(ExpandConstant('{app}\dotNet20\OstecPhotoAlbum.dll'));
Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727');
Exit;
end;
end;
//-------------------------------------------------------------------------------------------------
// 启动4.0 (集成x86、x64)
//-----------------------------------------------------------------------------------------------
function Setup(): Boolean;
var Path:string;
ResultCode: Integer;
begin
if Net40NotExist() then
begin
ExtractTemporaryFile('dotNetFx40_Full_x86_x64.exe');
Exec(ExpandConstant('{tmp}\dotNetFx40_Full_x86_x64.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
Result := true
end
else
begin
// MsgBox(ExpandConstant('{cm:warn}'), mbInformation, MB_YESNO)
Result := true
end;
//--------------------------------------------------------------------------
// 启动2.0(X86)
//---------------------------------------------------------------------------
if Net20NotExist() then
begin
ExtractTemporaryFile('dotNetFX20.exe');
Exec(ExpandConstant('{tmp}\dotNetFX20.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
Result := true
end
else
begin
// MsgBox(ExpandConstant('{cm:warn}'), mbInformation, MB_YESNO)
Result := true
end;
//----------------------------------------------------------
// 启动2.0(X64)
//------------------------------------------------------------
if Net20X64NotExist() then
begin
ExtractTemporaryFile('dotNetFX2064.exe');
Exec(ExpandConstant('{tmp}\dotNetFX2064.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
Result := true
end
else
begin
// MsgBox(ExpandConstant('{cm:warn}'), mbInformation, MB_YESNO)
Result := true
end;
end;