我有一个类似于Inno Setup的问题:验证是否已安装.NET 4.0,但它似乎略有不同.
[Files]
Source: "dependencies\dotNetFx40_Full_x86_x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall; Check: FrameworkIsNotInstalled
Source: "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MySql.Data\v4.0_6.5.4.0__c5687fc88969c44d\MySql.Data.dll"; DestDir: "{app}\lib"; StrongAssemblyName: "MySql.Data, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, ProcessorArchitecture=MSIL"; Flags: "gacinstall sharedfile uninsnosharedfileprompt"
[Run]
Filename: {tmp}\dotNetFx40_Full_x86_x64.exe; Description: Install Microsoft .NET Framework 4.0; Parameters: /q /norestart; Check: FrameworkIsNotInstalled
[code]
function FrameworkIsNotInstalled: Boolean;
begin
Result := not RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Microsoft\.NETFramework\policy\v4.0');
end;
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在尝试向GAC注册文件.不幸的是,在某些机器上可能没有安装.NET框架.所以我需要先安装它.无论如何,在我尝试注册文件之前,我是否可以强制安装.NET运行时?
有没有办法检查是否已安装.NET Framework 4并仅在不在系统中时安装它?
我知道,如果通过检查以下注册表项来安装.NET Framework 4,我如何确定?
hasDotnet4 :=
RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0');
Run Code Online (Sandbox Code Playgroud)
如何根据上述检查有条件地运行.NET Framework 4安装?
如果用户安装了.Net Framework,如何在Windows注册表中检测到?我不是在寻找基于.Net的解决方案,因为查询来自InnoSetup.
我从阅读Stack Overflow上的另一篇文章了解到.Net Framework是4.0的现场升级.
我已经知道如何检查用户是否在系统上安装了4.0版,即通过检查以下内容:
function FindFramework(): Boolean;
var
bVer4x0: Boolean;
bVer4x0Client: Boolean;
bVer4x0Full: Boolean;
bSuccess: Boolean;
iInstalled: Cardinal;
begin
Result := False;
bVer4x0Client := False;
bVer4x0Full := False;
bVer4x0 := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0');
bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4 \Client', 'Install', iInstalled);
if (1 = iInstalled) AND (True = bSuccess) then bVer4x0Client := True;
bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4 \Full', 'Install', iInstalled);
if (1 = iInstalled) AND (True = bSuccess) then bVer4x0Full := True;
if (True = bVer4x0Full) …Run Code Online (Sandbox Code Playgroud)