VEJAM

CURSO PROFISSIONALIZANTES

Inno Setup – Identificando framework 1

Nenhum comentário


Um amigo me perguntou como fazer para que o Inno Setup identificasse qual framework está instalado na máquina e se não tiver, como fazer o download e instalar o mesmo.

Abaixo eu montei um script que faz este processo de instalação do framework, no caso eu usei o Framework 3.5 SP 1 para identificar se o mesmo está instalado ou não.

Uma lista de como identificar quais fw´s estão instalados pode ser obtida em http://msdn.microsoft.com/en-us/kb/kbarticle.aspx?id=318785 e basta trocar a chave de registro na linha 40 do script pela versão do fw que você necessita.

1 RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'SP', regresult);


No script iremos fazer o download do pacote standalone do fw3.5sp1, que pode ser obtido emhttp://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe ou no link http://www.microsoft.com/en-us/download/details.aspx?id=22 , para o pacote do installer.

O Inno setup não tem suporte nativo para download de arquivos, mas isso não quer dizer que não possa ser feito.

Para atribuir esta funcionalidade ao Inno iremos usar um pacote chamado “InnoTools Downloader” que pode ser baixado em http://www.sherlocksoftware.org/file.php?id=40
No tutorial eu utilizei a versão 0.3.5.

Documentação online do InnoTools Downloaderhttp://www.sherlocksoftware.org/innotools/itdhelp/index.html.

Bom, agora vamos ao que interessa.

Crie um novo script no Inno.
Uma linha muito importante que deve ser adicionada ao script é a linha

1 #include ReadReg(HKEY_LOCAL_MACHINE,'Software\Sherlock Software\InnoTools\Downloader','ScriptPath','')


No meu caso é a primeira linha do script, esta linha adiciona a DLL (itdownload.dll) ao nosso script, é ela que iremos usar para baixar o fw.

Aqui iremos usar um pouco de programação pascal, pois é preciso para fazer as chamadas e a montagem das telas do download.

Atenção aos comentários no script, tem bastante informação útil.

01 //incialização do setup. É sempre chamada pelo Inno ao iniciar o setup


02 procedure InitializeWizard();


03 var


04 filename : string;


05 regresult : cardinal;


06 begin


07 // verifica se o framework 3.5 sp1 está instalado.


08 // mais detalhes para outros frameworks: http://msdn.microsoft.com/en-us/kb/kbarticle.aspx?id=318785


09 RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'SP', regresult);


10


11 //se o resultado for um. Então o SP1 está instalado


12 //Este resultado é o valor da chave


13 if regresult <> 1 then begin


14 // definir o caminho do arquivo


15 filename := expandconstant('{tmp}\fx3.5sp1.exe');


16


17 // não está instalado. Exibir a mensagem para o usuário se deseja instalar o fw


18 if MsgBox('Para continuar a instalação é necessário fazer o download do Framework 3.5 SP1. Deseja continuar?', mbInformation, mb_YesNo) = idYes then begin


19 //iniciar o itd


20 itd_init;


21


22 //adiciona um arquivo na fila de downloads. (pode se adicionar quantos forem necessários)


23 itd_addfile('http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe', filename);


24


25 //aqui dizemos ao itd que é para fazer o download após o inno exibir a tela de preparação do setup


26 itd_downloadafter(wpReady);


27 end else begin


28 // o usuário optou por não fazer o download do fw, então avisamos de onde ele pode baixar


29 MsgBox('O link para download manual do framework éhttp://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe', mbInformation, mb_Ok);


30 end


31 end


32 end;


33


34 //Este método é chamado pelo Inno ao clicar em próximo. Neste momento a interface já está criada


35 procedure CurStepChanged(CurStep: TSetupStep);


36 var


37 filename : string;


38 ErrorCode: Integer;


39 begin


40


41 filename := expandconstant('{tmp}\fx3.5sp1.exe');


42


43 if CurStep = ssInstall then begin


44 // este passo só irá acontecer após o download do arquivo.


45 // para evitar erros, validamos se o arquivo foi baixado. Se não foi, continua com o setup.


46 if fileExists(filename) then begin


47 // foi baixado. Executar o instalador do fw.


48 if not ShellExec('', filename,'', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then begin


49 // Xi! Deu erro


50 if ErrorCode <> 0 then begin


51 MsgBox('Erro ao executar o arquivo ' + filename + chr(13) + SysErrorMessage(ErrorCode), mbError, mb_Ok);


52 end;


53 end


54 end;


55 end;


56 end;


Abaixo o código completo do Script.

01 #include ReadReg(HKEY_LOCAL_MACHINE,'Software\Sherlock Software\InnoTools\Downloader','ScriptPath','')


02 #define MyAppName "Desenvolvedores"


03 #define MyAppVersion "1.5"


04 #define MyAppPublisher "desenvolvedores.net"


05 #define MyAppURL "http://desenvolvedores.net"


06 #define MyAppExeName "desenvolvedores.exe"


07


08 [Setup]


09 AppId={{006DC1BE-0C38-46DF-AF73-CC79E3A1E9F4}


10 AppName={#MyAppName}


11 AppVersion={#MyAppVersion}


12 AppPublisher={#MyAppPublisher}


13 AppPublisherURL={#MyAppURL}


14 AppSupportURL={#MyAppURL}


15 AppUpdatesURL={#MyAppURL}


16 DefaultDirName={pf}\{#MyAppName}


17 DisableDirPage=yes


18 DefaultGroupName={#MyAppName}


19 OutputBaseFilename=setup


20 Compression=lzma


21 SolidCompression=yes


22


23 [Languages]


24 Name: portugues; MessagesFile: C:\Program Files (x86)\Inno Setup 5\Languages\BrazilianPortuguese.isl


25


26 [Registry]


27


28 [Files]


29


30 [Run]


31


32 [Code]


33 //incialização do setup. É sempre chamada pelo Inno ao iniciar o setup


34 procedure InitializeWizard();


35 var


36 filename : string;


37 regresult : cardinal;


38 begin


39 // verifica se o framework 3.5 sp1 está instalado.


40 // mais detalhes para outros frameworks: http://msdn.microsoft.com/en-us/kb/kbarticle.aspx?id=318785


41 RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'SP', regresult);


42


43 //se o resultado for um. Então o SP1 está instalado


44 //Este resultado é o valor da chave


45 if regresult <> 1 then begin


46 // definir o caminho do arquivo


47 filename := expandconstant('{tmp}\fx3.5sp1.exe');


48


49 // não está instalado. Exibir a mensagem para o usuário se deseja instalar o fw


50 if MsgBox('Para continuar a instalação é necessário fazer o download do Framework 3.5 SP1. Deseja continuar?', mbInformation, mb_YesNo) = idYes then begin


51 //iniciar o itd


52 itd_init;


53


54 //adiciona um arquivo na fila de downloads. (pode se adicionar quantos forem necessários)


55 itd_addfile('http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe', filename);


56


57 //aqui dizemos ao itd que é para fazer o download após o inno exibir a tela de preparação do setup


58 itd_downloadafter(wpReady);


59 end else begin


60 // o usuário optou por não fazer o download do fw, então avisamos de onde ele pode baixar


61 MsgBox('O link para download manual do framework éhttp://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe', mbInformation, mb_Ok);


62 end


63 end


64 end;


65


66 //Este método é chamado pelo Inno ao clicar em próximo. Neste momento a interface já está criada


67 procedure CurStepChanged(CurStep: TSetupStep);


68 var


69 filename : string;


70 ErrorCode: Integer;


71 begin


72


73 filename := expandconstant('{tmp}\fx3.5sp1.exe');


74


75 if CurStep = ssInstall then begin


76 // este passo só irá acontecer após o download do arquivo.


77 // para evitar erros, validamos se o arquivo foi baixado. Se não foi, continua com o setup.


78 if fileExists(filename) then begin


79 // foi baixado. Executar o instalador do fw.


80 if not ShellExec('', filename,'', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then begin


81 // Xi! Deu erro.


82 if ErrorCode <> 0 then begin


83 MsgBox('Erro ao executar o arquivo ' + filename + chr(13) + SysErrorMessage(ErrorCode), mbError, mb_Ok);


84 end;


85 end


86 end;


87 end;


88 end;


FONTE: http://techblog.desenvolvedores.net

Nenhum comentário :

Postar um comentário