sábado, outubro 18, 2008

NSIS - parte 3

Continuando o nosso tour pelo NSIS, vamos ver como deixar o nosso instalador e desinstalador compatível com o Add Remove Program do Control Panel.

Isto é muito simples: basta o instalador gravar as informações corretos no Registry, sob a chave HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall, e desinstalador apagá-las. É necessário alguns cuidados, para não acontecerem algumas coisas inesperadas ou incorretas.

Infelizmente, não consegui encontrar a documentação destas chaves do Registry (o link em um dos artigos mencionados acima está quebrado). O mais próximo que encontrei foi uma descrição no contexto do Windows Installer. De qualquer forma, aqui vai um resumo incompleto:
  • você precisa criar uma chave com nome único debaixo do HLM\...\Uninstall. Você pode usar o nome do seu programa, um GUID ou um misto dos dois.
  • Dentro desta chave você vai criar alguns valores; DisplayName e UninstallPath são obrigatórios.
  • DisplayName é o nome da aplicação apresentado no Add Remove Programs.
  • UninstallPath é o caminho para o programa de desinstalação.
  • DisplayIcon informa onde obter o ícone
  • DisplayVersion informa a versão do programa
  • Publisher é que publica o programa
  • UrlInfoAbout indica o site do publisher
Ok, hora de usar o NSIS. O novo script é:
#
# Quarto exemplo de uso do NSIS
#

LoadLanguageFile "${NSISDIR}\Contrib\Language files\PortugueseBR.nlf"
Name "Calculadora"
OutFile "InstCalc.exe"
InstallDir "$PROGRAMFILES\Calc"
InstallDirRegKey HKLM "Software\NSIS_Exemplo3" "Install_Dir"

Var ChaveUninstall

;--------------------------------
; Instalador

Page directory
Page components
Page instfiles

Section "-Obrigatoria"
StrCpy $ChaveUninstall "Software\Microsoft\Windows\CurrentVersion\Uninstall\DQSoft_Calc"
SetOutPath $INSTDIR
File "c:\windows\system32\calc.exe"
WriteRegStr HKLM SOFTWARE\NSIS_Exemplo3 "Install_Dir" "$INSTDIR"
WriteUninstaller "uninstall.exe"
WriteRegStr HKLM $ChaveUninstall "DisplayName" "Calculadora (remoção)"
WriteRegStr HKLM $ChaveUninstall "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM $ChaveUninstall "DisplayIcon" '"$INSTDIR\calc.exe"'
WriteRegStr HKLM $ChaveUninstall "DisplayVersion" "1.0.0"
WriteRegStr HKLM $ChaveUninstall "Publisher" "DQSoft"
WriteRegStr HKLM $ChaveUninstall "UrlInfoAbout" "http://dqsoft.blogspot.com"
SectionEnd

Section "Atalhos no Menu Iniciar"
CreateDirectory "$SMPROGRAMS\Exemplo 4"
CreateShortCut "$SMPROGRAMS\Exemplo 4\Calculadora.lnk" "$INSTDIR\calc.exe"
CreateShortCut "$SMPROGRAMS\Exemplo 4\Remove.lnk" "$INSTDIR\uninstall.exe"
SectionEnd

Section "Atalho no Desktop"
CreateShortCut "$DESKTOP\Calculadora.lnk" "$INSTDIR\calc.exe" "" "$INSTDIR\calc.exe" 0
SectionEnd

;--------------------------------
; Desinstalador

UninstPage uninstConfirm
UninstPage instfiles

Section "Uninstall"
StrCpy $ChaveUninstall "Software\Microsoft\Windows\CurrentVersion\Uninstall\DQSoft_Calc"
Delete "$INSTDIR\*.*"
RMDir "$INSTDIR"
Delete "$SMPROGRAMS\Exemplo 4\*.*"
RMDir "$SMPROGRAMS\Exemplo 4"
Delete "$DESKTOP\Calculadora.lnk"
DeleteRegKey HKLM SOFTWARE\NSIS_Exemplo3
DeleteRegKey HKLM $ChaveUninstall
SectionEnd

Para não ter que ficar repetindo o monstrengo do nome da chave, usei uma variável (ChaveInstall); de resto são comandos que já vimos na parte anterior. A operação do instalador continua a mesma, porém seus efeitos são um pouco diferentes.

Se olharmos no Registry, veremos as chaves de remoção (clique para ampliar):

O nosso programa passa a aparecer no Add Remove Programs (clique para ampliar):

ese clicarmos no link "click here for support information":

Após a desinstalação tudo isto some.

No próximo post vamos deixar para traz a aparência antiquada do nosso instaldor e ver a Moderm User Interface. Até lá!

Nenhum comentário: