我正在用C#开发一个应用程序。我正在尝试使用Inno Setup创建安装包,但我需要检查用户是否安装了.NET框架。我这样做了,但问题就出现了:如果用户不想安装.NET 4,程序需要取消安装。我怎么能这样做?
[Run]
Filename: "{app}\dotNetFx40_Full_x86_x64.exe"; Check: FrameworkIsNotInstalled
Filename: "{app}\sis_visu_ipccV2.0.exe"; Description: "{cm:LaunchProgram,SisIPCCAR4}"; Flags: nowait postinstall skipifsilent
[Code]
function FrameworkIsNotInstalled: Boolean;
begin
if MsgBox('Foi detectado que seu computador não possui o .NET Framework 4.0. Para que o aplicativo execute normalmente é necessário tê-lo instalado. Deseja instalar? ', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then
begin
Result := not RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0');
end
else begin
Abort;
end;
end;
答案 0 :(得分:1)
我会在一开始就检查并请求.NET安装的许可。
如果用户选择NOT
安装.NET,安装过程将终止。
如果用户将AGREE
安装.NET,安装过程将正常运行,.NET将在安装结束时安装(通过RUN
部分)。
您可以将其从RUN
部分移至BeforeInstall
或选择其他解决方案,但这需要编写额外的代码。
示例:
[Run]
Filename: "{app}\dotNetFx40_Full_x86_x64.exe"; WorkingDir: "{app}";
Parameters: "/passive /norestart"; Flags: waituntilterminated skipifdoesntexist;
StatusMsg: "{cm:dotNetInstallation}"; Check: not dotNetInstalled
Filename: "{app}\sis_visu_ipccV2.0.exe"; Description: "{cm:LaunchProgram,SisIPCCAR4}";
Flags: nowait postinstall skipifsilent
[CustomMessages]
dotNETnotpresent=Foi detectado que seu computador não possui o .NET Framework 4.0. Para que o aplicativo execute normalmente é necessário tê-lo instalado. %n%nDeseja instalar?
dotNetInstallation=Installation of .NET Framework 4.0 in progress...
[Code]
var
dotNetBool: Boolean;
function InitializeSetup(): Boolean;
var
Q: Integer;
begin
Result := False;
dotNetBool := False;
if not RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0') then begin
//Registry entry was not found, quesion will appear
Q := MsgBox(ExpandConstant('{cm:dotNETnotpresent}'), mbInformation, MB_YESNO);
if Q = IDYES then begin
//If the asnwer is YES, Setup will initialize
//If the answer is NO, Setup will terminate
Result := True;
end;
end
else begin
//Registry entry was found, Setup will initialize
dotNetBool := True;
Result := True;
end;
end;
function dotNetInstalled: Boolean;
begin
Result := dotNetBool;
end;