Как перенаправить «AppData \ Roaming» в подкаталог, чтобы сделать приложение более переносимым

730
JonathanDavidArndt

Портативные приложения - это простые, простые программы, которые не нужно устанавливать на каждом компьютере, который вы используете.

Некоторые установщики программного обеспечения, кажется, не делают ничего, кроме проверки среды и копирования файлов на жесткий диск. Что мне нужно, так это мои установленные приложения Windows на внешнем жестком диске (или USB-устройстве), которые можно переносить между компьютерами. Настройки и данные также должны храниться на внешнем жестком диске, чтобы изменения приложений (или ход игры) можно было сохранять на разных компьютерах.

Теперь многие приложения Windows используют каталог «AppData \ Roaming» для определенных настроек и пользовательских данных. Это местоположение, похоже, хранится в переменной окружения. Есть ли способ временно переопределить USERPROFILEили APPDATAрасположение только для одного приложения? Это было бы идеально, чтобы настройки и данные могли быть записаны в одно место, а не копироваться между внешним жестким диском и хост-компьютером.

Это выходит за рамки идеи PortableApps (тм). Я не хочу упаковывать приложения или устанавливать нелепое время выполнения. Что-то хорошее и простое это все, что я ищу.

Любое предлагаемое решение не должно создавать помехи другим приложениям.

0

1 ответ на вопрос

0
JonathanDavidArndt

После небольшого тестирования я смог подтвердить, что вы можете переопределить переменные среды Windows в командной строке, и их значения будут наследоваться другими процессами, которые впоследствии запускаются из той же командной строки. Таким образом, у нас есть следующий пакетный файл:

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" 

Каждая командная строка получает свою собственную копию переменных среды Windows при первом открытии, и эти значения могут быть изменены отдельно от любых других командных приглашений. Другие процессы не зависят от этих изменений.


С другой стороны, постоянные изменения переменных среды могут быть сделаны с помощью setx .