Configurando o Setup Factory para empacotar dependências do .NET 4.6.1 e LocalDB

Configuração Inicial do Projeto

Após criar um novo projeto no Setup Factory, arraste todos os arquivos do seu aplicativo para a janela do projeto.

Defina as variáveis de sessão necessárias, personalize a aparência do instalador (fundo, ícones) e configure as propriedades do sistema.

Clique com o botão direito no executável principal e configure o diretório de instalação padrão, atalhos no menu Iniciar e ícone do aplicativo.

Verificação e Instalação do LocalDB

Na etapa de pós-instalação, adicione um script para verificar se o SQL Server LocalDB já está instalado. Se não estiver presente, execute o instalador correspondente.

if (not localdbInstalled) then -- Executa o instalador do LocalDB local localdbInstallerPath = SessionVar.Expand("%AppFolder%\DBSetup\SqlLocalDB_2016_en.msi"); Shell.Execute(localdbInstallerPath, "open", "", "", SW_SHOWNORMAL, true); end

-- Inicia o aplicativo principal local appExePath = SessionVar.Expand("%AppFolder%\GTRAsenwarePanel.exe"); Shell.Execute(appExePath, "open", "", "%AppFolder%", SW_SHOWNORMAL, false);


</div>Configurando a Dependência do .NET Framework 4.6.1
--------------------------------------------------

Utilize o módulo de dependência do .NET 4 existente no Setup Factory como base para a versão 4.6.1.

### 1. Informações do Módulo

Altere o nome e a descrição do módulo para refletir a versão 4.6.1. A descrição deve mencionar que o instalador do .NET Framework Redistributable 4.6.1 (NDP461-KB3102436-x86-x64-AllOS-ENU.exe) será incluído e instalado automaticamente se necessário.

### 2. Função de Detecção (verificarDotNetInstalado)

Implemente uma função que consulta o registro para verificar se a versão mínima do .NET 4.6.1 (4.6.01055) já está instalada.

<div>```
function verificarDotNetInstalado()
    local dotNetRegPath = "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full";
    local dotNetRegistryExists = Registry.DoesKeyExist(HKEY_LOCAL_MACHINE, dotNetRegPath);
    
    if (not dotNetRegistryExists) then
        SetupData.WriteToLogFile("Info\tMódulo .NET: Chave do .NET 4 não encontrada. Instalação necessária.\r\n", true);
        return false;
    else
        local installSuccess = Registry.GetValue(HKEY_LOCAL_MACHINE, dotNetRegPath, "Install", true);
        if (installSuccess == "1") then
            local installedVersion = Registry.GetValue(HKEY_LOCAL_MACHINE, dotNetRegPath, "Version", true);
            local comparison = String.CompareFileVersions(installedVersion, "4.6.01055");
            
            if (comparison >= 0) then
                SetupData.WriteToLogFile("Info\tMódulo .NET: .NET Framework 4.6.1 ou superior já instalado.\r\n", true);
                return true;
            else
                SetupData.WriteToLogFile("Info\tMódulo .NET: Versão inferior do .NET 4.6.1 encontrada.\r\n", true);
                return false;
            end
        else
            SetupData.WriteToLogFile("Info\tMódulo .NET: Instalação do .NET 4 não bem-sucedida ou não encontrada.\r\n", true);
            return false;
        end
    end
    return false;
end

Este script principal verifica o sistema operacional, os pré-requisitos (como o Internet Explorer 6.0 SP1 e permissões de administrador) e, se necessário, instala o .NET Framework 4.6.1. Ele também lida com erros e reinicializações do sistema.

if (not verificarDotNetInstalado()) then -- Variáveis de controle e mensagens traduzidas para o português local msgInstalacao = "O instalador detectou que os arquivos de tempo de execução do .NET estão desatualizados.\nClique em OK para instalar ou Cancelar para abortar."; local tituloDialogo = "Tecnologia Necessária"; local mostrarPrompt = true; local executarInstalacao = true; local requisitosAtendidos = true; local listaErros = {}; local caminhoInstalador = SessionVar.Expand("%TempLaunchFolder%\dotnet461\NDP461-KB3102436-x86-x64-AllOS-ENU.exe"); local precisaReinicializar = false;

SetupData.WriteToLogFile("Success\tMódulo .NET: Script de instalação iniciado.\r\n", true);

-- Verificação de pré-requisitos
-- Verifica versão do IE, permissão de administrador, versão do MSI e sistema operacional.
-- As verificações são semelhantes ao código original, mas reorganizadas e com nomes em português.

if (mostrarPrompt) then
    local resultadoDialogo = Dialog.Message(tituloDialogo, msgInstalacao, MB_OKCANCEL, MB_ICONEXCLAMATION);
    executarInstalacao = (resultadoDialogo == IDOK);
end

if (requisitosAtendidos and executarInstalacao) then
    local argumentos = "/norestart ";
    -- Inicia o instalador do .NET e trata o resultado
    local resultadoInstalacao = File.Run(caminhoInstalador, argumentos, "", SW_SHOWNORMAL, true);
    
    if (resultadoInstalacao == 3010 or resultadoInstalacao == 1614) then
        precisaReinicializar = true;
    elseif (resultadoInstalacao ~= 0) then
        -- Tratamento de erros específicos (1602, 1603, 5100, etc.)
        local msgErro = "Ocorreu um erro durante a instalação do .NET. Deseja continuar?";
        local erroDialogo = Dialog.Message("Erro na Instalação", msgErro, MB_OKCANCEL, MB_ICONEXCLAMATION);
        if (erroDialogo == IDOK) then
            Application.Exit(EXIT_REASON_USER_ABORTED);
        end
    end
    -- Limpeza de arquivos temporários
    File.Delete(caminhoInstalador);
elseif (not requisitosAtendidos) then
    -- Notifica o usuário sobre os requisitos não atendidos e pergunta se deseja abortar
    local msgRequisitos = "Os seguintes requisitos não foram atendidos:\n- " .. Table.Concat(listaErros, "\n- ");
    Dialog.Message("Aviso", msgRequisitos, MB_OK, MB_ICONINFORMATION);
    Application.Exit(EXIT_REASON_USER_ABORTED);
end

if (precisaReinicializar) then
    local msgReinicializacao = "Uma reinicialização é necessária. Reinicie e execute o instalador novamente.";
    local reiniciarAgora = Dialog.Message("Reinicialização Necessária", msgReinicializacao, MB_OKCANCEL, MB_ICONINFORMATION);
    if (reiniciarAgora == IDOK) then
        System.Reboot();
    else
        Application.Exit(EXIT_REASON_USER_ABORTED);
    end
end

end


</div>### 4. Localização dos Pacotes de Dependência

Coloque o instalador do .NET Framework 4.6.1 (NDP461-KB3102436-x86-x64-AllOS-ENU.exe) em um subdiretório dentro da pasta "Dependencies" do diretório de instalação do Setup Factory, ou em um caminho de sua preferência, e configure o caminho no script.

Após configurar todos os itens, gere o instalador e realize testes em um sistema limpo para validar todo o processo.

Tags: Setup Factory .NET Framework 4.6.1 LocalDB SQL Server Windows Installer

Publicado em 7-13 03:43