2015-01-19 7 views
1

나는 C#에서 응용 프로그램을 개발 중입니다. Inno Setup을 사용하여 설치 팩을 만들려고하는데 사용자가 .NET Framework를 설치했는지 확인해야합니다. 나는 이것을했지만 여기에 문제가있다. 사용자가 .NET 4를 설치하지 않으려는 경우, 프로그램은 설치를 취소해야한다. 어떻게해야합니까?Inno Setup에서 설치 취소하기

[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

. 모든 파일을 설치 한 다음 설치를 취소하는 것은별로 의미가 없습니다. – RobeN

+0

설치가 초기화 된 후 바로 메시지를 표시하려면 어떻게합니까? 죄송 합니다만, 요즘은 Inno를 사용하기 시작했습니다. 내 코드가 작동하지 않습니다! – user3628552

+0

함수 InitializeSetup() : Boolean;에서 Check 함수를 구현하거나 호출 한 다음 메시지 상자에서 결과 (예 :'Q ')를이 함수의 결과로 전달할 수 있습니다. 예 : 'Q = IDYES이면 Result : = True);'설정을 계속할 것입니다. – RobeN

답변

1

.NET 설치의 허가를 확인합니다.

사용자가 NOT을 선택하여 .NET을 설치하면 설치 프로세스가 종료됩니다.

사용자가 AGREE .NET을 설치하면 설치 프로세스가 정상적으로 실행되고 설치가 끝나면 .NET이 (RUN 섹션을 통해) 설치됩니다.


당신은 BeforeInstallRUN 섹션을 이동하거나 다른 솔루션을 선택,하지만 코드의 추가 조각을 쓸 필요로 할 수 있습니다.


예 : 나는 순서를 변경 및 .NET 검사를 수행 + 설정이 초기화 직후에 메시지를 표시 할 경우에

[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; 
+0

아직 문제가 있습니다. .NET이 이미 설치된 컴퓨터에서도 .NET 설치가 시작됩니다. 그것은 수리 중이다. 마지막 문제입니다. 감사! – user3628552

+0

@ user3628552 - 당신 말이 맞아요. 나는 그것을 잊었다. 업데이트 된 코드가 게시되었습니다. – RobeN

+1

동일하게 할 수 있습니다 [단축] (http://pastebin.com/B4tGtVQf). – TLama

관련 문제