Aplicativos que somente usam arquivos na própria pasta são portáteis naturais, mais a maioria deles usam registroarquivospastas no computador local (pc do usuário).

Preparando o portátil

Pegue os arquivos do aplicativo

Primeiro de tudo devemos extrair os arquivos do programa de instalação (setup), com o Universal Extractor. Caso seja necessário a instalação do aplicativo monitere-a com o Total Uninstall (fazendo assim você saberá o que será necessário para funcionamento do portátil).
Este é um simples exemplo usando o CCleanerbaixe a versão portátil e descompacte em  CCleanerPortable\App\CCleaner.

Monitorando execução e/ou instalação

Execute o Total Uninstall, clique em Instalar, depois em Navegar e selecione  CCleanerPortable\App\CCleaner\CCleaner.exe
Clique em Seguinte para criar uma nova fotografia (captura/snapshot)
Clique em Seguinte para executar a instalação do aplicativo
CCleaner é executado em inglês. Veja em Opções/Avançado (Options/Advanced) que a ultima opção salvar todas as configurações não pode ser desabilitada (devido ao arquivo portable.dat). Selecione seu idioma em Opções/Configurações (Options/Settings) e feche o CCleaner.
Clique em Seguinte no Totall Uninstall para encontrar as alterações.
Feche para ver as mudanças:
CCleaner changes
Não há mudanças! CCleaner é um portátil natural.

Prepararando o lançador (launcher)

Neste caso o lançador é inútil, mais pode ser usado pra mover configurações para a pasta Data
Se não houver os arquivos portable.dat e ccleaner.ini, o CCleaner usa o registro HKEY_CURRENT_USER\Software\Piriform.
Uma boa seria forçar o uso do arquivo ini para criar o portátil.dat, outra seria mover o arquivo ini para a pasta Data para manter as configurações quando atualizar.
Lançador também pode gravar dados em CCleaner.ini para fixar algumas configurações:

[Options]
Language=1046
BackupDir=L:\PortableApps\CCleanerPortable\Backups

1046 é a id decimal do Brasil e pode ser retornada através do GetUserDefaultLangID do kernel32, nós vamos utilizar ela para fixar o português do Brasil como idioma padrão.

Lançar aplicativo

O lançador é um pequeno executavel exe que deve ficar na pasta *Portable (pasta raiz do portátil) ele é compilado com o NSIS. Baixe e instale o NSIS.

Lançador básico

Copie o código abaixo e cole para o Notepad++ e salve com o nome CCleanerPortable.nsi na pasta CCleanerPortable.
Clique com o botão direito do mouse sobre CCleanerPortable.nsi e escolha a opção Compile NSIS Script, será criado o lançador

WindowIcon Off
SilentInstall Silent
AutoCloseWindow True
OutFile CCleanerPortable.exe

Section
ExecWait "$EXEDIR\App\CCleaner\CCleaner.exe"
SectionEnd
  • lançador não exibe o ícone
  • lançador não exibe uma tela de saída do próprio
  • lançador é automaticamente fechado quando o aplicativo for encerrado
  • nome do lançador será CCleanerPortable.exe

Na seção ExecWait executa o aplicativo e espera ser finalizado o CCleander.exe. ($EXEDIR representa o caminho onde está sendo executado o lançador)

Construindo lançador

Baixe e extraia CCleanerPortableSources na sua pasta CCleanerPortable.
Abra com o Notepad++ CCleanerPortable_1.nsi.
Sempre que usarmos constantes e funções, devemos estruturar uma seção chamada de principal (Section Main), ela é um cronograma com a ordem das funções e etc.
Linhas que começam com ponto e vírgula são comentários/informações e não são compiladas.
Leia os comentários para melhor compreensão.

Lançador Completo

Abra CCleanerPortable_2.nsi com o Notepad++.
Adicionado: Informações sobre versão, checagem do sistema antes de inicializar, customização, imagem/som de inicialização (splash) e mais alguns parâmetros.
Você vai precisar do FindProcDLL plug-in baixe e o instale.

Lançador Final

Abra CCleanerPortable_3.nsi com o Notepad++.
O código é igual aos 2 anteriores, porém a parte comum está no PortableApp.nsh e será incluída através do !include.

Backup e restauração de chaves do registro

Registry plug-in

Você vai precisar do NSIS plug-in for registry para compilar. Baixe, extraia e o instale.

Parte: Audacity 1.2.6

Baixe o audacity-win-1.2.6.exe e descompacte para AudacityPortable\App\Audacity
Monitore a execução do audacity.exe com o Total Uninstall (não associe a extenção .AUP)
Abra um arquivo de áudio e exporte como MP3. A mesma configuração pode ser feita através de
Editar, Preferências, Formatos de arquivo: Configurações de Exportação em MP3: Econtrar Plug-in e selecione o local onde está o lame_enc.dll
Em Pastas: Pasta de arquivos temporários selecione um local para a pasta temporária
Feche e veja as mudanças:
Audacity 1.2.6 changes
Exporte as alterações do registro no formato Win9x/NT4 (.reg):

REGEDIT4

[HKEY_CURRENT_USER\Software\Audacity\Audacity]
"WantAssociateFiles"=dword:00000000

[HKEY_CURRENT_USER\Software\Audacity\Audacity\Directories]
"TempDir"="C:\\DOCUME~1\\Admin\\LOCALS~1\\Temp\\AudacityPortableTemp\\"

[HKEY_CURRENT_USER\Software\Audacity\Audacity\MP3]
"MP3LibPath"="L:\\PortableApps\\AudacityPortable\\App\\LAME\\lame_enc.dll"

Somente entradas importantes devem ser gravadas através do lançador (outras configurações são feita pelo próprio programa e ficam guardadas na pasta Data).
Baixe o Reg2Nsis e instale será ativado o contexto menu. Clique com botão direito do mouse sobre o arquivo .reg e selecione a opção Convert to nsis script será gerado um código convertido no formato .nsh abra ele com Notepad++:

WriteRegDWORD HKEY_CURRENT_USER "Software\Audacity\Audacity" "WantAssociateFiles" 0x0
WriteRegStr HKEY_CURRENT_USER "Software\Audacity\Audacity\Directories" "TempDir" \
"C:\DOCUME~1\Admin\LOCALS~1\Temp\AudacityPortableTemp\"
WriteRegStr HKEY_CURRENT_USER "Software\Audacity\Audacity\MP3" "MP3LibPath" \
"L:\PortableApps\AudacityPortable\App\LAME\lame_enc.dll"

C:\DOCUME~1\Admin\LOCALS~1\Temp este diretório pode ser representado por: $TEMP
L:\PortableApps\AudacityPortable o diretório onde contém o lançador pode ser representado por: $EXEDIR
Baixe e extraia AudacityPortable
Abra AudacityPortable_1.nsi com Notepad++
Monitorando com o Total Uninstall nós vimos que foi usado apenas uma chave pelo Audacity HKEY_CURRENT_USER\Software\Audacity mais as vezes outros aplicativos podem usar mais que uma chave.

BackupLocalKeys

HKEY_CURRENT_USER\Software\Audacity é renomeado para HKEY_CURRENT_USER\Software\Audacity-BackupByAudacityPortable.

RestorePortableKeys

As configurações são salvas em Data\Audacity.reg ao fechar, quando o portátil é executado novamente as configurações do usuário são restauradas.

Init

Esta função força configurações necessárias do portátil, tal como a atualização dos locais onde estão armazenados os arquivos.

Close

Ao fechar o Audacity: A pasta temporária é apagada.

BackupPortableKeys

Configurações são salvas em Data\Audacity.reg.

RestoreLocalKeys

Configurações que estão em Data\Audacity.reg são restauradas.

Backup e restauração de pastas

Parte: Instant Color Picker

Baixe icp_setup.exe e extraia os arquivos com o Universal Extractor ou Inno Setup Unpacker
Copie o conteúdo que esta em dentro de {app} e cole para
InstantColorPickerPortable\App\InstantColorPicker
o conteúdo que está dentro de {userappdata}\Young Smart Software mova para
InstantColorPickerPortable\Data\InstantColorPicker
"Instale" icp.exe com Total Uninstall
Feche e veja as mudanças:
ICP changes
ICP só usa a pasta Young Smart Software em C:\Documents and Settings\Admin\Application Data ($APPDATA para NSIS)
Baixe e extraia InstantColorPickerPortable.
Abra o InstantColorPickerPortable_Lite.nsi com o Notepad++

BackupLocalDirs

Em Application Data, a pasta Young Smart Software folder é renomeada para Young Smart Software--BackupByInstantColorPickerPortable

RestorePortableDirs

As configurações do portátil estão em Data\InstantColorPicker e são copiadas para Application Data\Young Smart Software.
(Nós temos que usar a função CopyFiles (Copiar arquivos) no lugar da da função Rename (Renomar) por causa que os locais são diferentes).

BackupPortableDirs

Ao fechar o ICP, é feita a operação reversa de RestorePortableDirs.

RestoreLocalDirs

Reverso de BackupLocalDirs

Backup e restauração de arquivos

É feito do mesmo jeito do backup/restauração de pasta. Baixe este modelo nele você vai encontrar ações feitas no registro, pasta e arquivos.
Se você está portablizando um aplicativo que contem diversas ações, você deve copiar as linhas alternando somente alguns parâmetros, veja modelo abaixo realizando ação em duas chaves do registro:

	!define REGKEY1 "HKEY_LOCAL_MACHINE\SOFTWARE\MyProg"
!define REGKEY2 "HKEY_CURRENT_USER\Software\MyProg"
;...
${registry::DeleteKey} "${REGKEY1}-BackupBy${APP}Portable" $R0
${registry::MoveKey} "${REGKEY1}" "${REGKEY1}-BackupBy${APP}Portable" $R0
${registry::DeleteKey} "${REGKEY2}-BackupBy${APP}Portable" $R0
${registry::MoveKey} "${REGKEY2}" "${REGKEY2}-BackupBy${APP}Portable" $R0
;...

A remoção do backup não é necessariamente precisa, mais se fora apagada não há como recuperar.
Apague constantes, funções e chamadas (calls) que não forem utilizados.

Complementos

Leia o manual do NSIS Capítulo 4 (Inglês): Tendo como referência Funções, Instruções, Variáveis, Constantes...

NSIS Constantes

Em muitas constantes ($APPDATA, $SYSDIR...) que são definidas pelo NSIS boa parte dos valores depende da versão do Windows e da localização.
Compile Constants.nsi e execute Constants.exe que irá gerar Constants.ini que mostra as constantes, e os locais que elas representam em seu computador. Elas mostram caminhos do usurário atual e de todos os usuários, através do  SetShellVarContext current (atual) ou all (todos).