2015-01-19 6 views
1

Я разрабатываю приложение на C#. Я пытаюсь создать установочный пакет с помощью Inno Setup, но мне нужно проверить, установлен ли у пользователя платформа .NET. Я сделал это, но здесь возникает проблема: если пользователь не хочет устанавливать .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

В этом случае я бы изменить порядок и выполнить .NET Check + отобразить сообщение сразу после установки инициализирует. Нет никакого смысла устанавливать все файлы, а затем ... отменять настройку в самом конце. – RobeN

+0

Как я могу отобразить сообщение сразу после инициализации установки? Извините, но я начал использовать Inno в эти дни. Мой код не работает! – user3628552

+0

Вы можете реализовать или вызвать функцию проверки в 'function InitializeSetup(): Boolean;', а затем передать результат (например, как 'Q') из окна сообщений в результат этой функции. Например. 'if Q = IDYES then Result: = True),' что будет продолжать установку. – RobeN

ответ

1

Я хотел бы проверить и попросить разрешение на установку .NET в самом начале.

Если пользователь установит NOT для установки .NET, процесс установки будет завершен.

Если для установки .NET будет установлено AGREE, процесс установки будет работать нормально, а .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; 
+0

У него все еще есть проблема. Даже на компьютерах, которые уже имеют .NET, начинается установка .NET. В нем говорится, что это ремонт. Это последняя проблема. Благодаря! – user3628552

+0

@ user3628552 - вы правы. Я забыл об этом. Обновлен код. – RobeN

+1

То же самое может быть [сокращено] (http://pastebin.com/B4tGtVQf). – TLama

Смежные вопросы