Como redirecionar “AppData \ Roaming” para um subdiretório para tornar um aplicativo mais portátil

0

Aplicativos portáteis são programas simples e agradáveis que não precisam ser instalados em todos os computadores que você está usando.

Alguns instaladores de software não parecem fazer muito, exceto verificar o ambiente e copiar arquivos para o disco rígido. O que eu gostaria é de meus aplicativos do Windows instalados em um disco rígido externo (ou dispositivo USB) que pode ser transportado entre computadores. As configurações e os dados também devem ser armazenados no disco rígido externo para que as alterações do aplicativo (ou o progresso do jogo) possam ser preservadas em todos os computadores.

Agora, muitos aplicativos do Windows usam o diretório "AppData \ Roaming" para determinadas configurações e dados do usuário. Esta localização parece estar armazenada em uma variável de ambiente. Existe uma maneira de substituir temporariamente o local USERPROFILE ou APPDATA para apenas um aplicativo? Isso seria ideal, para que as configurações e os dados pudessem ser gravados em um local, em vez de serem copiados entre o disco rígido externo e o computador host.

Isso vai além da ideia do PortableApps (tm). Eu não quero empacotar aplicativos ou instalar algum tempo de execução ridículo. Algo bom e simples é tudo o que procuro.

Qualquer solução proposta não deve causar interferência em outros aplicativos.

    
por JonathanDavidArndt 05.07.2017 / 19:13

1 resposta

0

Após alguns testes, confirmei que você pode substituir variáveis de ambiente do Windows em um prompt de comando, e seus valores serão herdados por outros processos que são lançados posteriormente a partir desse mesmo prompt de comando. Como tal, temos o seguinte arquivo em lotes:

REM -- Path to the directory of this script (make sure to remove ending slash)
set CURRENT_DIR=%~dp0
REM -- Great example from Strawberry Perl's portable shell launcher:
if not "" == "%CURRENT_DIR%" if #%CURRENT_DIR:~-1%# == #\# set CURRENT_DIR=%CURRENT_DIR:~0,-1%

REM -- OVERRIDE the user environment variable to point to a portable directory
set USERPROFILE=%CURRENT_DIR%\Data

REM -- (Optional) Some programs do not use these environment variables
::set APPDATA=%CURRENT_DIR%\Data\AppData\Roaming>nul
::set ALLUSERSPROFILE=%CURRENT_DIR%\Data\AppData\Roaming>nul
::set PROGRAMDATA=%CURRENT_DIR%\Data\AppData\Roaming>nul

REM -- Start the application
start "" /D"%CURRENT_DIR%\MyAppDir" "myprogram.exe" "param 1" param_2 "param 3"

Cada prompt de comando recebe sua própria cópia das variáveis de ambiente do Windows quando aberto pela primeira vez, e esses valores podem ser alterados isoladamente de qualquer outro prompt de comando. Outro processo não é afetado por nenhuma dessas mudanças.

Por outro lado, alterações permanentes em variáveis de ambiente podem ser feitas com setx .     
por 05.07.2017 / 19:13