So leiten Sie "AppData \ Roaming" in ein Unterverzeichnis um, um eine Anwendung portabler zu machen

783
JonathanDavidArndt

Portable Anwendungen sind nette, einfache Programme, die nicht auf jedem Computer installiert werden müssen, den Sie verwenden.

Einige Software-Installationsprogramme scheinen nicht viel zu tun, außer die Umgebung zu überprüfen und Dateien auf Ihre Festplatte zu kopieren. Was ich möchte, sind meine installierten Windows-Apps auf einer externen Festplatte (oder einem USB-Gerät), die zwischen Computern transportiert werden können. Einstellungen und Daten sollten auch auf der externen Festplatte gespeichert werden, damit Anwendungsänderungen (oder der Spielfortschritt) auf allen Computern erhalten bleiben können.

Viele Windows-Anwendungen verwenden jetzt das Verzeichnis "AppData \ Roaming" für bestimmte Einstellungen und Benutzerdaten. Dieser Ort scheint in einer Umgebungsvariablen gespeichert zu sein. Gibt es eine Möglichkeit, den USERPROFILEoder APPDATAStandort für nur eine Anwendung vorübergehend zu überschreiben ? Dies wäre ideal, damit Einstellungen und Daten an einen Ort geschrieben werden können, anstatt zwischen externer Festplatte und Hostcomputer kopiert zu werden.

Dies geht über die Idee von PortableApps (tm) hinaus. Ich möchte keine Anwendungen packen oder eine lächerliche Laufzeit installieren. Etwas Schönes und Einfaches ist alles, wonach ich suche.

Jede vorgeschlagene Lösung darf keine Interferenz mit anderen Anwendungen verursachen.

0

1 Antwort auf die Frage

0
JonathanDavidArndt

Nach einigen Tests konnte ich bestätigen, dass Sie Windows-Umgebungsvariablen in einer Eingabeaufforderung überschreiben können, und ihre Werte werden von anderen Prozessen geerbt, die anschließend von derselben Eingabeaufforderung aus gestartet werden. Als solche haben wir die folgende Batchdatei:

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" 

Jede Eingabeaufforderung erhält beim ersten Öffnen eine eigene Kopie der Windows-Umgebungsvariablen. Diese Werte können getrennt von anderen Eingabeaufforderungen geändert werden. Andere Prozesse bleiben von diesen Änderungen unberührt.


Andererseits können mit setx permanente Änderungen an Umgebungsvariablen vorgenommen werden .