「AppData \ Roaming」をサブディレクトリにリダイレクトして、アプリケーションの移植性を高める方法


0

ポータブルアプリケーションは、使用しているすべてのコンピューターにインストールする必要がない、すてきなシンプルなプログラムです。

一部のソフトウェアインストーラーは、環境を確認し、ファイルをハードドライブにコピーする以外は、ほとんど何もしないようです。欲しいのは、コンピューター間で持ち運びできる外部ハードドライブ(またはUSBデバイス)にインストールされたWindowsアプリです。アプリケーションの変更(またはゲームの進行状況)をコンピューター間で保持できるように、設定とデータも外部ハードドライブに保存する必要があります。

現在、多くのWindowsアプリケーションは、特定の設定とユーザーデータに「AppData \ Roaming」ディレクトリを使用しています。この場所は環境変数に保存されているようです。一時的に無効にする方法があるUSERPROFILEか、APPDATA1つのアプリケーションだけのための場所は?外部ハードドライブとホストコンピューター間でコピーするのではなく、設定とデータを1つの場所に書き込むことができるのが理想的です。

これはPortableApps(tm)の概念を超えています。アプリケーションをパッケージ化したり、ばかげたランタイムをインストールしたりしたくありません。私が探しているのは素敵でシンプルなものだけです。

提案されたソリューションは、他のアプリケーションに干渉してはなりません。

回答:


0

少しテストした後、コマンドプロンプトで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を使用して行うことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.