[IT] Windows 7 環境変数 PATHの文字数制限

[IT] Windows 7 環境変数 PATHの文字数制限

(ニッチな中身なので、コンピュータヲタク以外は適当に読み流してください)

お約束:

Win32 における環境変数の文字数の制限は 32,767 文字ですが、[コマンド プロンプト] では、親プロセスから受け継がれた環境変数のうち、独自の制限である (使用するオペレーティング システムに応じて) 2047 文字または 8191 文字を超えるものは無視されます。

最近、Cygwin を更新したんですが環境変数 PATH の反映がおかしいので、PATH 以外の設定状況も含めて Bash で確認すると・・・

↑ イケてませんねぇ。実にイケてません。しかも外部 GPU が無い環境なのにも関わらず、NVIDIA Direct3D SDK 10 や普段使用していない Microsoft Research KinectSDK なども盛り沢山です。これは週末メンテ対象にするとして、Windows 7 OS システム環境変数 PATH を参照し項目毎にソートします。

Windows 7 OS システム環境変数 PATH を参照し項目毎にソート結果

%SystemRoot%;
%SystemRoot%\system32;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\PHP\;
C:\PROGRA~2\JPKI;
C:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;
C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;
C:\Program Files (x86)\Common Files\Roxio Shared\10.0\DLLShared\;
C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;
C:\Program Files (x86)\Common Files\Sony Shared\FeliCaLibrary;
C:\Program Files (x86)\Common Files\Sony Shared\FeliCaNFCLibrary;
C:\Program Files (x86)\GtkSharp\2.12\bin;
C:\Program Files (x86)\JavaFX\javafx-sdk1.3\bin;
C:\Program Files (x86)\JavaFX\javafx-sdk1.3\emulator\bin;
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;
C:\Program Files (x86)\Microsoft Research KinectSDK\;
C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;
c:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64;
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;
C:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64;
C:\Program Files (x86)\NVIDIA Corporation\Cg\bin;
C:\Program Files (x86)\QuickTime\QTSystem\
C:\Program Files (x86)\Windows Live\Shared;
C:\Program Files\Common Files\Intel\WirelessCommon\;
C:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;
C:\Program Files\Common Files\Microsoft Shared\Windows Live;
C:\Program Files\Common Files\Sony Shared\FeliCaLibrary;
C:\Program Files\Common Files\Sony Shared\FeliCaNFCLibrary;
C:\Program Files\Intel\WiFi\bin\;
C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;
C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;
c:\Program Files\Microsoft SQL Server\110\Tools\Binn\;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\bin\;
C:\Program Files\System Center Operations Manager 2007\;
C:\Program Files\TortoiseSVN\bin;
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\common\bin;

↑ これまたイケてない。普段どんな開発をこのマシンで行っているのかバレますが。

そういえば数年前に、とある開発案件で「SetEnvironmentVariable 関数」を利用することで、追加モジュールからの引数を渡しやすくなるというのを、ふと思い出した。

それと Cygwin 標準パスが C:\cygwin\bin が反映されていない(bash 環境変数に書いておいても良いのですが、どこからでも cygwin.dll 経由で cygwin コマンドが使えると便利なこともあるので)のは、冒頭のお約束に書いた内容が該当しているかも。

システム制限を突破したらラクチンと思われるかもしれませんが、このマシンでは OS 互換性を最大限に意識した開発を行うマシンなので、なるべくではなく、絶対にシステム制限を変更しないように努めています。

ならば、どうするべきか?

ーーー

■考察

PATH を都度切り替えて使用できるバッチファイルを複数作成しておく。

つまり、CUDA ライブラリを参照する際(このマシンでは直接 CUDA 開発はしないが、出先でデバッグする際に確認したいことがあるので)は MS SQL は使用しない、もちろん PKI や Felica library も使用しない。 → cudaenv.bat

中身は

@echo off

set PATH=%PATH%;C:\Program Files (x86)\JavaFX\javafx-sdk1.3\bin;・・・略

のように記述。

また、標準は自分の中で最低限必要なものを纏めて standardenv.bat と。

もちろん、複数のパスを短い変数名にして割り当てるのもいい。

@echo off
set SQLPATH=c:\Program Files (x86)\Microsoft SQL Server\なんとか多数
set PATH=%PATH%;%SQLPATH%;C:\Program Files (x86)\JavaFX\javafx-sdk1.3\bin;・・・略

ーーー

■まとめ

インストーラに頼りすぎないで、適度に何を追加したのかシステム対話を積極的に図っていくことを忘れるなかれ。

以上

 

 

Comments are closed.

Web Analytics