You are on page 1of 17

Criando instaladores para Windows com o Inno Setup

Criado 31/mar/2008 s 15h54 por Marcos Elias Pico

18

Introduo
O Inno Setup um gerador de programas de instalao para Windows, gratuito e de cdigo aberto. um dos instaladores mais bem feitos e usados, concorre diretamente com muitos softwares comerciais do tipo. Voltado a desenvolvedores diversos, ele facilita a criao de um programa de instalao para suas aplicaes, com um visual moderno e clssico de instalador, se mantendo prtico e cheio de recursos. Ter um instalador prprio mal feito ou feito na correria pode ser ruim para seus programas, bom preparar uma instalao bem feita - afinal, o primeiro contato dos usurios com seu programa geralmente se d durante a instalao :) Entre vrias outras coisas, o Inno Setup permite criar chaves no registro e em arquivos INI, alm do bsico de um instalador: copiar arquivos para alguma pasta e a criao de atalhos. Ele tem vrias propriedades que podem ser configuradas, como limitar a instalao a somente administradores, registrar DLL/OCX, instalar fontes, e muito mais. Ainda cria um desinstalador, que pode remover completamente seu programa. Uma grande possibilidade que ele tem suporte a uma espcie de "programao" interna, onde voc pode personalizar o instalador usando algumas funes como se estivesse num ambiente de programao. possvel tambm chamar funes de DLLs, ou seja: as possibilidades so imensas. Ele pode ser baixado em:

http://www.jrsoftware.org/ A gerao dos instaladores com o Inno Setup se d por meio de um script. O compilador dele l o script e gera um executvel, unindo seus arquivos, as configuraes e o mdulo do instalador (um executvel pronto, que realizar a instalao baseando-se nas configuraes definidas). O resultado um nico arquivo .exe, que pode ser facilmente distribudo. O instalador dos seus programas ter esta aparncia:

A criao do script, que basicamente um arquivo de texto puro (com a extenso .iss), pode ser feita digitando-se os comandos manualmente ou ento usando o assistente de criao do Inno que gera um projeto bsico. A forma mais fcil de criar um novo instalador usar o assistente, e depois modificar o arquivo do projeto manualmente. E claro, modificar vrias vezes, compilar e testar, at ficar pronto :) O assistente dele faz o bsico, vou me concentrar em mostrar alguns pontos importantes para um bom instalador, como a criao de chaves no registro, e orientao sobre como "programar" no Inno Setup, dando exemplo de uso de uma DLL externa. O assistente do Inno exibe algumas telas, basta voc ir preenchendo com as informaes do seu programa e avanando:

Ao final, ele tem um script bsico, que voc poder modificar sem grandes dificuldades. Antes de comear, bom ter organizado e separado os arquivos do seu programa. Deixe tudo o que dever existir no sistema do usurio em uma pasta, com subpastas, se necessrio - toda a estrutura ser copiada. Separe tambm o texto da licena da aplicao, de preferncia num arquivo TXT. Iniciando o compilador do Inno Setup, escolha a opo "Create a new script using the Script Wizard". V preenchendo as informaes conforme solicitadas, e ao concluir, ter o script padro gerado. Considerando que ele um gerador de programas de instalao para um software que voc tenha criado, no haver dificuldade em passar pelo assistente. Para compilar seu projeto, tecle CTRL+F9, e para compilar e testar, F9 apenas (como no Delphi). Voc pode usar os menus ou botes da barra de ferramentas tambm, claro. O ambiente do Inno funciona como um debugger, mostrando quando algo estiver errado (inclusive indicando a linha), alm de exibir um log da instalao em andamento (enquanto voc testar o instalador a partir da interface dele). O arquivo para ser distribudo ser o setup.exe, que por padro fica na pasta "Output", onde estiver salvo o script. A estrutura bsica do script do Inno Setup esta:

[Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{4BD6DFD3-105A-4921-B253-3F15E6022B5C} AppName=My Program AppVerName=My Program 1.5 AppPublisher=My Company, Inc. AppPublisherURL=http://www.example.com/ AppSupportURL=http://www.example.com/ AppUpdatesURL=http://www.example.com/ DefaultDirName={pf}My Program DefaultGroupName=My Program OutputBaseFilename=setup Compression=lzma SolidCompression=yes [Languages] Name: "brazilianportuguese"; "compiler:LanguagesBrazilianPortuguese.isl" MessagesFile:

[Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "C:Program Files (x86)Inno Setup 5ExamplesMyProg.exe"; DestDir: "{app}"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}My Name: "{commondesktop}My desktopicon Program"; Program"; Filename: "{app}MyProg.exe" Filename: "{app}MyProg.exe"; Tasks:

[Run] Filename: "{app}MyProg.exe"; Description: Flags: nowait postinstall skipifsilent

"{cm:LaunchProgram,My

Program}";

Veja que o arquivo tem o estilo dos arquivos INI, sendo bem fcil de editar. Algumas sees permitem vrios parmetros, neste caso eles devem ser separados por ponto-e-vrgula, alm de terem seu contedo declarado entre aspas, se tiver espaos. A seo [Setup] define informaes bsicas do programa de instalao, como o nome da aplicao, URL do produtor, pasta padro para instalao, etc. O Inno Setup usa algumas constantes de pastas prprias; voc pode ver uma relao completa na ajuda dele. Por exemplo, {pf} retorna o caminho completo da pasta "Arquivos de programas" no sistema do usurio independente do idioma do Windows ou partio em que ela esteja. Na seo [Setup], vrias coisas podem ser ativadas ou desativadas, como a compresso, a exibio de uma licena de uso, a possibilidade de proteger a instalao com uma senha, entre muitas outras. As entradas nesta seo so simples, sendo basicamente no estilo Diretiva=Opo. A seo [Languages], como o nome sugere, permite definir os idiomas da instalao. No assistente voc pode escolher vrios idiomas, ou modificar as entradas aqui, adicionando novas linhas para os idiomas desejados. Por exemplo, para manter o instalador em ingls e portugus, voc colocaria:

[Languages] Name: "brazilianportuguese"; "compiler:LanguagesBrazilianPortuguese.isl" Name: "english"; MessagesFile: "compiler:Default.isl"


O "Default.isl" o arquvio de texto com as mensagens para ingls, ele est na pasta do Inno Setup (por isso pode-se usar "compiler:", que retorna a pasta do compilador do Inno). O Inno Setup gera instaladores multi-linguagem, e caso tenha mais de um idioma definido, aparecer uma caixa de dilogo para seleo da linguagem no comeo da instalao. Das outras sees, a [Files] a mais importante. Ela define as pastas e arquivos que sero instalados no sistema. A [Icons] permite a criao de atalhos, a [Run] a execuo de comandos logo aps a concluso da instalao, e a [Tasks] permite criar "tarefas", itens de checkbox que aparecero antes de iniciar a instalao, podendo ser marcados ou desmarcados pelo usurio. As entradas nas outras sees referenciando uma tarefa previamente definida na seo [Tasks] s sero executadas se o usurio deixar marcada a opo correspondente, durante a instalao. O uso do Inno no difcil, mas voc precisa dedicar um tempinho at entender como as entradas do script dele se relacionam. Na pasta "Examples", dentro da pasta do Inno, existem exemplos bsicos sem muitas entradas - permitindo que voc estude um assunto por vez. Nesse artigo vou destacar alguns meios de usar o Inno para gerar instaladores mais profissionais e responsveis, sem ficar usando muito as opes "padres" apenas. Particularmente fiz algumas modificaes no Inno Setup, e lancei um fork dele com o nome Mep Installer. Traduzi o programa inteiro e o contedo da ajuda (pelo menos dos recursos que mantive). O material serve como um timo tutorial e referncia em portugus de boa parte dos recursos do Inno Setup, e pode ser lido sem precisar instalar o programa, em:

MessagesFile:

http://www.mephost.com/software/help/mpist14/ajuda.htm Basta desconsiderar o que no se aplicar ao Inno :)

Viso geral de um instalador, e noes bsicas


O instalador o programa que vai instalar os arquivos e configuraes do seu programa no sistema do usurio. importante que ele seja bem feito, e responsvel - que limpe tudo o que fizer, numa desinstalao. Algumas observaes que voc deve ter em mente:

recomendvel que o programa seja instalado apenas por um administrador. Usurios limitados no podem gravar coisas em chaves globais do registro, nem em pastas do sistema (como a Arquivos de programas). Apesar de ser possvel o usurio gravar coisas nas suas pastas pessoais (podendo at instalar o programa nela, se as caractersticas da instalao permitir), com a vinda do Windows Vista e o XP, popular com o NTFS por padro, bom restringir a instalao aos administradores. No Windows XP com o HD formatado em FAT32, um usurio limitado at pode instalar coisas na Arquivos de programas, mesmo que no possa gravar dados em algumas chaves do registro. J com o sistema de arquivos NTFS, padro no Vista tambm, no tem como ele gravar dados na Arquivos de programas. Nas verses recentes do Inno Setup, por padro, a instalao s pode ser feita por um administrador. Se quiser permitir que usurios limitados executem seu instalador, ento adicione na seo [Setup] esta linha: PrivilegesRequired=none. Na desinstalao, limpe tudo o que o seu programa colocar, mas tome o cuidado de no apagar arquivos do usurio. O Inno Setup remove uma boa parte do que ele faz na instalao automaticamente. Mas em algumas situaes, alguns arquivos podem permanecer no HD. Tome o cuidado de remover estes arquivos (comentarei como logo mais). Em coisas exclusivas do seu programa (pastas, chaves do registro e atalhos), use um nome que provavelmente s o seu programa use, para evitar conflitos com outros programas que possam existir no sistema do usurio.

Entendendo melhor o arquivo de projeto do Inno Setup


O arquivo de projeto formado por sees, grupos de opes e configuraes. Os nomes das sees so identificados entre colchetes, e aparecem em negrito na tela do compilador. Os itens referentes a uma determinada seo devem estar "dentro" dela. Algumas sees possuem itens como diretivas, idnticas aos arquivos INI. Por exemplo:

[Setup] AppName=Meu AppPublisher=Meu nome


Outras sees podem possuir mais parmetros, geralmente separados por um ponto-e-vrgula. Veja:

Programa

[Files] Source: "MeuPrograma.exe"; DestDir: "{app}"


No recomendvel especificar duas vezes uma mesma seo, coloque as diretivas ou parmetros de uma mesma seo embaixo da mesma identificao dela. Voc pode colocar comentrios dentro do script. Comentrios so textos que no so compilados, eles apenas indicam alguma coisa, em especial para quem ir ler ou trabalhar com o script ("script" o "texto" do arquivo de projeto). Basta iniciar uma linha com o ponto-e-vrgula:

; Isto um comentrio... Bl, Bl, Bl......


Se voc possui um arquivo de projeto com informaes que devero se repetir em vrias instalaes, pode utilizar a diretiva #include. O contedo do arquivo indicado ser inserido no local especificado, e aps ele as informaes que estiverem sero continuadas, como se fossem um arquivo s. A sintaxe :

#include "meuarquivo.iss"
A extenso no precisa ser necessariamente .iss, pode ser outra se voc quiser, como .txt, por exemplo. O arquivo informado dever estar na mesma pasta do arquivo de projeto, ou ento voc pode informar o caminho completo (por exemplo, "C:Minha pastaMeu arquivo.iss"). Se o arquivo estiver na mesma pasta do compilador, voc pode utilizar assim: #include compiler:teste.iss. Alis, "compiler:" ser substitudo pelo caminho da pasta do compilador, em diversas sees.

Parmetros nas sees


Todas as sees do arquivo de projeto, com exceo de [Setup], [Messages], [CustomMessages], e [LangOptions], contm linhas separadas em parmetros. Veja o seguinte exemplo, da seo [Files]:

[Files] Source: Source: "MEUPROGRAMA.EXE"; "AJUDA.HLP"; DestDir: DestDir: "{app}" "{app}"

Source: "LEIAME.TXT"; DestDir: "{app}"; Flags: isreadme


Cada parmetro consiste em um nome, seguido por um identificador, e ento um valor. Exceto em alguns poucos casos, os parmetros so opcionais. Eles assumiro um valor padro se no forem especificados. Mltiplos parmetros em uma linha podem ser separados por ponto-e-vrgula, e podem estar em qualquer ordem. Geralmente se utilizam aspas duplas (") para definir o valor de um parmetro definido pelo usurio, como por exemplo o nome de um arquivo. Usar aspas quase sempre no obrigatrio, mas necessrio quando o valor tiver espaos. Se precisar utilizar aspas duplas em alguma definio, coloque duas aspas duplas consecutivas, para evitar conflito com as aspas delimitadoras do parmetro. A linha a seguir:

"Este exemplo ""contm aspas"" embutidas"


Ficaria assim, aps a compilao:

Este exemplo "contm aspas" embutidas


Se voc quiser que o valor de um parmetro seja uma nica aspa dupla, utilize ento quatro caracteres de aspas duplas: """". Os caracteres das extremidades cercam o valor como sendo um valor definido pelo usurio, e os dois do meio so para gerar um nico caractere de aspa.

Instalao de arquivos: dicas teis

O assistente de criao de script do Inno cria uma entrada para cada arquivo que voc adicionar, na seo [Files]. Por exemplo:

[Files] Source: Source: "C:programaPrograma.exe"; "C:programaLeiame.txt"; DestDir: DestDir: "{app}"; "{app}"; Flags: Flags: ignoreversion ignoreversion

Source: "C:programaFunes.dll"; DestDir: "{app}"; Flags: ignoreversion


Conforme voc for tendo muitos arquivos, ou pastas e subpastas, essa idia pode ficar confusa. A minha recomendao criar uma pasta e deixar nela todos os arquivos do seu programa, incluindo subpastas, exatamente como voc quer que eles fiquem na pasta do seu programa no sistema dos usurios. Assim, a seo [Files] teria uma entrada s:

[Files] Source: "C:programa*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs


Tudo o que estiver na pasta "C:programa" ser copiado para a pasta da aplicao (seja ela qual for, dado o uso da constante {app}, que retornar o caminho do seu programa no sistema dos usurios). Para incluir as subpastas e tudo o que existir dentro delas tambm, necessrio adicionar a flag recursesubdirs (note ela no final da linha acima). Se voc precisar copiar arquivos para outros lugares, como a pasta do Windows, por exemplo, pode deix-los numa pasta separada (fora da "C:programa", no exemplo) e incluir uma nova entrada na seo [Files], para o novo arquivo:

Source: "C:teste.dll"; DestDir: "{win}"; Flags: ignoreversion


As constantes de pastas retornam o caminho correto da pasta no sistema do usurio, independente do idioma do Windows ou da partio em que ele estiver instalado. Voc pode uslas na seo [Files] e em uma srie de outras, como na [Icons] ou na [Run]. A pasta padro do seu programa fica dentro da Arquivos de programas, um local til para guardar os programas. Se voc quiser escolher outro local, troque o valor da diretiva DefaultDirName na seo [Setup]:

DefaultDirName={pf}Meu programa
Para a maioria das instalaes, no necessrio alterar esse caminho. O instalador gravar no registro (na mesma chave de desinstalao) o caminho em que for instalado, e caso uma nova verso do programa for instalada, ele manter a pasta existente como padro. Ele detecta se o programa j est instalado ou no com base no valor da diretiva AppId, ID da aplicao, na seo [Setup]. Quando voc fizer uma nova verso do seu programa, que no puder ser entendida como uma atualizao da atual (ou que possa coexistir com ela no sistema), altere o valor da AppId. Mas no faa isso se voc pretende que o programa seja atualizvel, por exemplo, da verso 1.2 para 1.5. bom escolher um nome para a AppId que s o seu programa use, e seus programas diferentes tambm devero usar IDs diferentes. Uma outra recomendao minha manter o arquivo de projeto numa pasta, e dentro dessa pasta a pasta com os arquivos do programa a serem inclusos. Exemplo de estrutura:

instalador.iss leiame.txt licena.txt pasta_de_arquivos_do_programa

Assim, dentro do arquivo .iss voc pode referenciar os arquivos usando caminhos relativos, como por exemplo:

[Files] Source: "pasta_de_arquivos_do_programa*"; ignoreversion recursesubdirs DestDir: "{app}"; Flags:

Se precisar mover a pasta de lugar, leve tudo junto com ela. Dessa forma voc no precisar editar o arquivo para retirar a referncia esttica, como C:pasta, por exemplo.

Criao de atalhos no menu Iniciar


A criao de atalhos pode ser configurada na seo [Icons]. Tem esta sintaxe:

[Icons] Name: "{group}Meu Programa"; Filename: "{app}MeuPrograma.exe"


O parmetro "Name" recebe o caminho do atalho, sem precisar colocar a extenso .lnk. Por padro, o Inno Setup cria uma subpasta do menu "Iniciar > Programas". til quando voc instala vrios atalhos, no mesmo grupo de programa (ou se quiser separar um grupo de atalhos para a sua empresa, e dentro dela colocar os atalhos dos programas). Esse caminho pode ser alterado por padro na diretiva DefaultGroupName, da seo [Setup]. Agora, se seu programa s vai instalar um atalho (por exemplo, um navegador, ou um editor de textos), recomendvel que ele fique direto no "Iniciar > Programas", economizando o caminho para o usurio. Para isso, basta alterar a entrada na seo [Icons], deixando-a assim:

[Icons] Name: "{commonprograms}Meu Programa"; Filename: "{app}MeuPrograma.exe"


A constante {commonprograms} retorna o caminho da pasta que guarda os atalhos do menu Iniciar, comum para todos os usurios. A {userprograms} retorna o caminho da mesma pasta, mas sob o perfil do usurio. recomendvel usar a primeira. Se o usurio que instalar o programa no possuir direitos administrativos, ento a pasta correspondente do perfil dele ser usada automaticamente, em vez da pasta global. Os atalhos sero excludos na desinstalao apenas se o instalador os criar (ou se uma verso anterior do seu programa os tiver criado, mantendo a mesma AppId). Mas nada impede que voc exclua arquivos ou atalhos na desinstalao, como vou comentar mais frente.

Criando chaves no registro


A criao de chaves no registro durante a instalao pode ser feita com a funo [Registry]. Algumas flags especiais devem ser usadas nas chaves que o seu programa criar, para que elas possam ser removidas automaticamente na desinstalao. J nas chaves pblicas ou do Windows, em que o seu programa simplesmente alterar alguns valores, tenha cuidado: nunca use a flag para remoo na desinstalao. As entradas da seo [Registry] tm basicamente esta sintaxe:

[Registry] Root: HKCU; SubKey: ChaveSubchave; NomeDoValor; ValueData: DadoDoValor; ValueType: TipoDoValor; ValueName:

O parmetro Root define a chave root do registro que ser alterada. Voc deve colocar HKCU para a HKEY_CURRENT_USER, ou HKLM, para a HKEY_LOCAL_MACHINE (entre outras). No SubKey, defina o caminho desejado. Ele no precisa existir no sistema. Se no existir, ser criado automaticamente. Por exemplo, "SoftwareMinha EmpresaMeu Programa". Lembre-se de colocar textos que contenham espaos entre aspas. Em ValueType, defina o tipo do valor, que pode ser dword (inteiro), string (os mais usados), entre alguns outros. Para valores booleanos, use dword, e atribua ao valor 1 para True, ou 0 para False. Em ValueData, como era de se esperar, coloque o dado do valor. Se for uma string, prefira colocar entre aspas. Um exemplo:

Root: HKCU; SubKey: "SoftwareMinha EmpresaMeu programa"; ValueType: dword; ValueName: UsarCoresPersonalizadas; ValueData: 1;
Isso colocaria o valor 1 neste local:

HKEY_CURRENT_USER Software Minha Empresa Meu programa, valor dword "UsarCoresPersonalizadas", com o valor 1. Outro exemplo, agora com uma string, que uso num dos meus programas:

Root: HKCU; SubKey: "SoftwareMepMep Texto"; ValueType: Skin; ValueData: "{app}skins_Default Mep Texto 5.skn";

string;

ValueName:

Repare que voc pode usar constantes do Inno Setup no valor, se precisar, para usar caminhos de pastas ou arquivos que variam de sistema para sistema - como no caso, usei a {app} para retornar a pasta da aplicao, j que queria referenciar um arquivo dentro dela. Apesar de no ser necessrio seguir a ordem no script do Inno para as chaves do registro, uma organizao sempre faz bem. Por experincias prprias com ele, sugiro criar as chaves definindo que elas devero ser removidas aps a instalao, e s depois de declarar isso, colocar as entradas que gravaro os valores propriamente ditos. Por exemplo:

Root: Root: Root:

HKLM; HKCU; HKLM;

SubKey: SubKey: SubKey:

SoftwareEmpresa; SoftwareEmpresa;

Flags: Flags:

uninsdeletekeyifempty uninsdeletekeyifempty Flags: uninsdeletekey

SoftwareEmpresaPrograma;

Root: HKCU; SubKey: SoftwareEmpresaPrograma; Flags: uninsdeletekey


Isso supondo que voc grave as configuraes do seu programa na chave HKEY_CURRENT_USER Software Empresa Programa. Caso voc tenha vrios programas da mesma empresa, pode guardar as configuraes dos outros numa subchave da chave da empresa, que sero vistos pelo editor do registro do Windows como pastinhas:

Seguindo a forma exemplificada nas 4 linhas mais acima, voc obtm um instalador mais "profissional". Ele cria a chave para a empresa, se ainda no existir, e configura para remov-la na desinstalao apenas se estiver vazia (com o uso da flag uninsdeletekeyifempty). Aps isso, cria a chave do programa, dentro da chave da empresa, e configura para remoo na desinstalao, mesmo se no estiver vazia (j que est removendo o programa, no teria porque manter a chave do registro dele). A flag uninsdeletekey faz com que a chave e todas as suas subchaves sejam removidas na desinstalao. Caso voc tenha vrios programas, eles nunca removero as configuraes dos outros, pois cada um ter sua prpria chave, sob o nome da chave da empresa. Ao desinstalar o ltimo programa desta empresa, que a chave da empresa ser removida. Antes disso, no, pois com o uso da flag uninsdeletekeyifempty para a chave da empresa, esta no ser excluda se ainda existirem subchaves (provavelmente de seus outros

programas). Uma dica colocar na ordem exibida. Na desinstalao, o Inno Setup executa as funes correspondentes de baixo para cima no script, as primeiras entradas sero as ltimas a serem tratadas na desinstalao. Caso voc no queira usar uma chave para a empresa (que pode ser o seu nome, o produtor do programa), pode ento usar diretamente uma para o programa, ficando assim apenas:

Root:

HKLM;

SubKey:

SoftwarePrograma;

Flags:

uninsdeletekey

Root: HKCU; SubKey: SoftwarePrograma; Flags: uninsdeletekey


Nota: exemplifiquei com o uso do mesmo caminho de chave sob a HKEY_LOCAL_MACHINE e HKEY_CURRENT_USER. Para guardar as configuraes do usurio, sempre prefira a HKEY_CURRENT_USER, use a HKEY_LOCAL_MACHINE para guardar dados durante a instalao que devero estar acessveis para leitura por todos os usurios. Nunca use o uninsdeletekey em chaves usadas por outros programas ou pelo Windows. E a definio das chaves que seu programa usar deve ser feita no projeto do programa, no apenas na hora da criao do instalador. Se seu programa ir criar novas chaves em outros locais depois de aberto, uma boa inclu-las para remoo, bastando definir da forma acima, como se fosse cri-las, e usar as flags uninsdeletekey ou uninsdeletekeyifempty, dependendo da situao.

Associando arquivos ao seu programa


Um uso comum da seo [Registry] a associao de arquivos ao seu programa, embora eu prefira usar alguma funo diretamente dentro do programa - por poder ser chamada pelo usurio sem que ele precise realizar uma nova instalao. Ela pode ser feita pela chave HKEY_CLASSES_ROOT, e a sintaxe seria:

[Registry] Root: HKCR; Subkey: "MyProgramFile"; Root: HKCR; ValueData: Subkey: "My ".myp"; ValueType: string; Flags: ValueName: ""; ValueData: uninsdeletevalue ValueName: ""; uninsdeletekey

"MyProgramFile"; ValueType: string; Program File"; Flags:

Root: HKCR; Subkey: "MyProgramFileDefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}MYPROG.EXE,0" Root: HKCR; Subkey: "MyProgramFileshellopencommand"; ValueName: ""; ValueData: """{app}MYPROG.EXE"" ""%1"""
Onde: .myp

ValueType:

string;

extenso

desejada;

MyProgramFile o nome interno do tipo de arquivo, use um diferente para cada extenso; My Program File a descrio dos arquivos desse tipo, que aparecer no Windows Explorer; {app}MYPROG.EXE,0 define o cone dos arquivos, que poder estar em um executvel ou DLL (devendo ser seguido do ndice) ou indique diretamente um arquivo .ico; Tome cuidado aqui: ""{app}MYPROG.EXE"" ""%1"". desse jeito, use as aspas duplas e duplicadas, e cuidado com o espao antes do ""%1"". A string final dever ficar assim:

"C:Arquivos de programasMYPROG.EXE" "%1"

Como as aspas so usadas internamente pelo Inno, necessrio us-las duas vezes seguidas, "", para que sejam gravada no registro uma nica aspa. Dica: ao modificar as associaes de arquivos na instalao, inclua a diretiva ChangesAssociations=yes na seo [Setup]. Com ela, o instalador notifica o Windows para que recarregue as configuraes de associaes de arquivos no Explorer ao final da instalao. Ao associar arquivos ao seu programa, tenha em mente que o mesmo dever estar programado para abrir arquivos passados como parmetro pela linha de comando. Caso contrrio, ao dar um duplo clique num arquivo da extenso escolhida, o seu programa at ser aberto, mas sem fazer nada sem abrir o arquivo. Lembre-se que voc pode consultar a ajuda do Inno Setup (ou a ajuda on line do Mep Installer, que est em portugus) para ver as outras opes possveis.

Execuo de programas ao final da instalao ou desinstalao


Comum em muitos programas de instalao, pode ser til rodar programas no final da instalao ou antes da desinstalao. Para isso existem as sees [Run] e [UninstallRun]. A sintaxe bsica delas no tm segredo, e compartilham muitas propriedades. A Run roda programas ao final da instalao, antes de conclu-la, e a UninstallRun, antes da desinstalao comear. Um exemplo:

[Run] Filename: programa" {app}Programa.exe; Parameters: /teste; StatusMsg: "Testando o

A mensagem no StatusMsg opcional, e pode ser declarada para aparecer durante a instalao, enquanto o instalador termina. Se nada for informado, ficar a mensagem padro "Concluindo instalao". Com as flags voc pode configurar diversas coisas, como ocultar a janela do instalador ao rodar o comando, rodar o comando oculto (no faa isso para programas que exijam interao do usurio, seno o instalador vai ficar parado e o programa no seria mostrado :p), etc. So vrios os parmetros, h uma lista na ajuda que comentei, do Mep Installer:

http://www.mephost.com/software/help/mpist14/secao_run.htm Antes da desinstalao a mesma coisa, use apenas dentro da [UninstallRun].

Excluindo arquivos na desinstalao ou instalao


Por padro, o instalador do Inno Setup exclui apenas arquivos que ele tenha criado. Se seu programa criar pastas ou arquivos depois de instalado, estes permanecero no sistema do usurio. Algumas vezes podem ser arquivos INI, que ficam na pasta da aplicao (inadequado hoje em dia, visto que os usurios limitados no podem gravar nada na pasta Arquivos de programas, mas muitos "programadores" insistem em usar isso, em vez de guardar o INI numa pasta sob o perfil do usurio). Seja qual for o caso, ao desinstalar seu programa a pasta dele poder permanecer no sistema do usurio - o que um tanto "chato" e incmodo. Com a seo [UninstallDelete], voc pode excluir pastas ou arquivos, durante a desinstalao. Voc at pode colocar a pasta da sua aplicao, e excluir ela inteira. Mas isso no uma boa idia. Simples: se o usurio instalar o programa em outro lugar, por engano (como na pasta Documentos), ao desinstalar, a pasta toda iria pro saco. O meio mais "correto" seria incluir na

seo [UninstallDelete] apenas arquivos que voc saiba que seu programa poder criar, e que devero ser removidos. Exemplo:

[UninstallDelete] Type: Type: files; files; Name: Name: {app}Programa.ini {app}teste.txt

Type: filesandordirs; Name: {app}temporarios


Defina files no parmetro Type para excluir arquivos, e filesandordirs para excluir arquivos ou pastas (incluindo subpastas e tudo o que existir dentro delas). Em outras situaes, pode ser necessrio remover algum arquivo durante a instalao. Um exemplo quando uma nova verso do seu programa no usa mais um arquivo que uma verso anterior usava. Seria bom remov-lo :) Basta usar a [InstallDelete], e a sintaxe das entradas se mantm a mesma da [UninstallDelete].

Protegendo e criptografando o instalador com uma senha


O Inno Setup pode proteger a instalao com uma senha, uma medida de "segurana" bsica. A senha no a mesma coisa de um nmero serial, apesar de ter funo parecida: sem ela, no ser possvel continuar a instalao. simples, basta definir a diretiva Password na seo [Setup]:

Password=teste
A tela que pede a senha para o usurio ser assim:

A senha no ser gravada no arquivo diretamente, mas sim um hash (sombra) dela. Os arquivos, o contedo do instalador em si, no estaro "protegidos": eles no so encriptados por padro.

Voc pode forar uma encriptao usando a diretiva Encryption, ativando-a com "yes" na seo [Setup]:

Password=teste Encryption=yes
Para isso, uma DLL com a funo de criptografia do Inno dever ser colocada na pasta do Inno Setup. Ele no inclui o suporte "nativo" criptografia devido a legislao de alguns pases. Basta baixar a DLL em: http://www.jrsoftware.org/isdl.php E coloc-la na pasta do Inno (normalmente Arquivos de programas Inno Setup). No se preocupe em redistribui-la com o seu programa, no ser necessrio. Com a criptografia ativada, o contedo do instalador ser codificado usando como base a senha escolhida, e ento o arquivo estar protegido (mesmo que algum consiga acesso ao pacote de dados dentro do instalador - o que no difcil, visto que o Inno Setup open source - no poder fazer nada com os arquivos, pois estaro criptografados).

Protegendo com um nmero serial


A proteo por nmero serial um recurso possvel no Inno Setup, mas no "diretamente". Com a diretiva UserInfoPage=yes na seo [Setup], ele mostra uma tela para digitao de um nome de usurio e organizao. Mas no um nmero serial. O nome e a organizao podero ser recuperados com as constantes {userinfoname} e {userinfoorg}, podendo ser gravados no registro, num arquivo INI ou ento passados como parmetro para algum programa (usando a seo [Run], deixando a constante {userinfoname} ou {userinfoorg} como parmetro para o seu executvel). Para que aparea o campo de nmero serial, voc dever usar a seo [Code]. O Inno Setup, a partir da verso 4, permite a codificao usando o Pascal Script. uma linguagem de script baseada em Pascal, muito parecida com o Delphi. Voc pode "programar" dentro do Inno, executar funes personalizadas em algumas situaes e inclusive chamar funes em DLLs - suas ou no. A seo [Code] um pouco complexa para entender de imediato, ela contm funes e rotinas prprias que se aplicam apenas ao Inno Setup, assim como contm funes comuns a outros ambientes (principalmente ao Delphi; a saber, o Inno Setup feito em Delphi). Para verificao de nmero serial, voc deve criar a seo [Code] no script do Inno, e colocar a funo CheckSerial. Esta funo tem esta sintaxe:

function CheckSerial(Serial: String): Boolean;


O que ela faz? Ela recebe o serial preenchido pelo usurio, que passado como string, e deve devolver um valor booleano (sim ou no), para liberar ou no a instalao. Para implement-la, coloque no final do arquivo de script do Inno Setup:

[Code] function begin end;


Entre o begin e o end voc pode fazer literalmente o que quiser, como se estivesse num ambiente de programao. As funes internas providas com o Inno Setup so bsicas, mas voc poder chamar DLLs, como explico j j. Para validar o serial rapidamente, voc poderia colocar:

CheckSerial(Serial:

String):

Boolean;

function

CheckSerial(Serial:

String):

Boolean;

begin if Result else Result end;

Serial

= := :=

'123456'

then True False;

Isso limita a instalao ao serial "123456". Experimente compilar o instalador e testar :)

No se esquea de ativar a tela de informaes do usurio, colocando UserInfoPage=yes, na seo [Setup]. Se voc quiser, pode implementar um pouco mais, e testar tambm o nome de usurio e a organizao preenchidos. Para isso, precisar usar variveis e a funo ExpandConstant, que expande uma constante do Inno, retornando o valor dela como string:

function var usu, begin usu org

CheckSerial(Serial:

String):

Boolean;

org: := :=

String; ExpandConstant('{userinfoname}'); ExpandConstant('{userinfoorg}');

if (usu = 'Marcos') and (org = 'Guia do Hardware') and (Serial = '123456') then Result else Result := := True False;

end;
Coloquei assim por motivos didticos, nada impede que voc simplifique a verificao do if, deixando-o apenas assim:

Result := (usu = 'Marcos') and (org = 'Guia do Hardware') and (Serial = '123456');
Uma observao importante no Inno Setup, que esta funo chamada para cada caractere que o usurio digitar. Se voc inventar algum algoritmo de verificao diablico que coma muito processamento, a digitao do serial pelo usurio ficar "lenta". Ele chama a funo ao digitar, pois libera o boto "Avanar" apenas se a informao estiver correta. Enquanto a funo CheckSerial retornar False, o boto Avanar fica desativado. Nada impede que algum "hacker" manipule o estado do boto Next do Inno Setup, usando aplicaes de terceiros, e parta para a prxima tela sem digitar o nmero serial. O recurso interessante, mas deve ser usado com cuidado. O Inno um projeto aberto, suas especificaes so claras e qualquer um munido de conhecimentos avanados pode manipular a funo CheckSerial para sempre retornar True. A recomendao seria usar um sistema de registro externo ao Inno, com um algoritmo criado por voc, e talvez usar o campo de serial apenas para a insero do serial e posterior processamento - algo que pode ser til dado o visual do instalador, ficaria mais "tradicional" solicitar o nmero serial durante a instalao. Uma proteo maior pode se dar usando a senha com criptografia ativada, como comentado mais acima - onde mesmo se o "hacker" burlar o sistema e conseguir avanar, os arquivos estaro altamente corrompidos sem a senha certa, e no serviro para nada.

Integrao com DLLs: um exemplo prtico


Uma das grandes vantagens do Inno Setup a liberdade de programao. Com o Pascal Script, voc pode usar uma srie de funes para fazer uma infinidade de coisas. As funes inclusas com o Inno constam na ajuda dele, vale a pena dar uma conferida. E para as que no esto, voc pode usar funes de DLLs, sejam estas suas ou no. Vou dar um exemplo ainda na funo CheckSerial, onde o algoritmo de verificao do nmero serial fica numa DLL. H outras funes do Inno que so executadas em outras situaes, como ao avanar nas telas de instalao, ao iniciar o instalador, ao finaliz-lo, ao copiar arquivos, etc. Para usar funes de DLL, voc precisa declar-las, assim:

function

ValidaReg(usu,

org,

serial:

String):

Boolean;

external 'ValidaReg@files:CheckSerial.dll stdcall';


O primeiro nome ValidaReg escolhido pode ser um nome qualquer, ser o nome da funo importada dentro do programa - dentro do instalador. Ela receber trs parmetros: o nome do usurio, organizao e nmero serial preenchidos. E dever retornar um valor booleano, True para liberar a instalao, ou False para neg-la. Na segunda linha, fica indicado que a ValidaReg est na DLL CheckSerial.dll (que poderia ser qualquer outra). Mas onde estar esta DLL no sistema do usurio? Voc deve inclu-la no instalador, na seo [Files], com a flag especial dontcopy:

[Files] ... Source: "CheckSerial.dll"; Flags: dontcopy

Essa flag faz que o arquivo indicado no seja copiado para a pasta da aplicao. Ele ficar numa pasta temporria que o Inno Setup cria durante a instalao, e a remove assim que a instalao concluda. Declarada a funo da DLL, voc pode us-la no cdigo da seo [Code], como se fosse uma funo nativa do Inno. No caso da verificao do nmero serial, mudaramos o cdigo para isso:

function var usu, begin usu org Result end;

CheckSerial(Serial:

String):

Boolean;

org: := := :=

String; ExpandConstant('{userinfoname}'); ExpandConstant('{userinfoorg}'); ValidaReg(usu,org,Serial);

Ou seja, quem determinar o resultado (True ou False) deixa de ser um verificador diretamente nesta funo, sendo a funo ValidaReg na DLL. Aqui est um exemplo da integrao do Inno Setup com uma DLL. A criao de DLLs foge ao objetivo deste artigo, mas para que possa ser concludo, voc precisar criar uma DLL de exemplo. Em Delphi, voc poderia simplesmente criar um arquivo .dpr com este contedo, e compil-lo, que j teria a DLL que exporta a funo ValidaReg:

library uses Windows; function ValidaReg(usu, and org, serial: and String):

CheckSerial;

Boolean;

stdcall; then True False; ValidaReg;

begin if (usu='Marcos') Result else Result end; exports begin end.

(org='Mep') := :=

(serial='123-456-789')

Dentro da DLL voc pode programar como quiser, a fica a seu critrio. A validao do nmero serial deve usar algum algoritmo criado por voc, e claro, com algum sistema gerador de seriais com base no nome de usurio que s voc possua. No se esquea que as DLLs interagem com os arquivos independentemente da linguagem em que foram criados (Delphi, C++, VB, etc), j que elas so compiladas. A integrao com DLLs do Inno Setup muito boa e estvel, e permite que ele d conta de coisas que muitos instaladores comerciais no fazem.

Concluindo

Eis um pouco do Inno Setup. Ele ainda pode ser personalizado, de vrias formas: alm do uso de DLLs, possvel adicionar pginas (telas de instalao) personalizadas, para obter dados adicionais do usurio durante a instalao. Ou voc pode ir mais longe, baixando o cdigo fonte do Inno e alterando diretamente os arquivos do instalador - o que no fcil, mas pode ser uma experincia interessante. Ele foi feito em Borland Delphi, e compilado pelo Jordan Russell no velho Delphi 2 - j que as verses antigas do Delphi geram executveis bem pequenos, perto das verses recentes ;) Se voc no gosta de manipular o script diretamente, pode experimentar o ISTool, uma interface grfica para o Inno Setup, que permite criar e modificar os arquivos .iss facilmente:

Ele e vrias outras utilidades podem ser baixados na pgina de downloads do Inno: http://www.jrsoftware.org/is3rdparty.php Bom trabalho :)

You might also like