コロナに負けず、できることを少しずつ。

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

  • 2011.12.03
  • FX
NO IMAGE

[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%System32Wbem;
%SYSTEMROOT%System32WindowsPowerShellv1.0;
C:PHP;
C:PROGRA~2JPKI;
C:Program Files (x86)Common FilesMicrosoft SharedMicrosoft Online Services;
C:Program Files (x86)Common FilesMicrosoft SharedWindows Live;
C:Program Files (x86)Common FilesRoxio Shared10.0DLLShared;
C:Program Files (x86)Common FilesRoxio SharedDLLShared;
C:Program Files (x86)Common FilesSony SharedFeliCaLibrary;
C:Program Files (x86)Common FilesSony SharedFeliCaNFCLibrary;
C:Program Files (x86)GtkSharp2.12bin;
C:Program Files (x86)JavaFXjavafx-sdk1.3bin;
C:Program Files (x86)JavaFXjavafx-sdk1.3emulatorbin;
C:Program Files (x86)Microsoft ASP.NETASP.NET Web Pagesv1.0;
C:Program Files (x86)Microsoft Research KinectSDK;
C:Program Files (x86)Microsoft SQL Server100DTSBinn;
C:Program Files (x86)Microsoft SQL Server100ToolsBinn;
C:Program Files (x86)Microsoft SQL Server100ToolsBinnVSShellCommon7IDE;
c:Program Files (x86)Microsoft SQL Server110ToolsBinn;
C:Program Files (x86)Microsoft Visual Studio 10.0VCbinx86_amd64;
C:Program Files (x86)Microsoft Visual Studio 9.0Common7IDEPrivateAssemblies;
C:Program Files (x86)NVIDIA CorporationCgbin.x64;
C:Program Files (x86)NVIDIA CorporationCgbin;
C:Program Files (x86)QuickTimeQTSystem
C:Program Files (x86)Windows LiveShared;
C:Program FilesCommon FilesIntelWirelessCommon;
C:Program FilesCommon FilesMicrosoft SharedMicrosoft Online Services;
C:Program FilesCommon FilesMicrosoft SharedWindows Live;
C:Program FilesCommon FilesSony SharedFeliCaLibrary;
C:Program FilesCommon FilesSony SharedFeliCaNFCLibrary;
C:Program FilesIntelWiFibin;
C:Program FilesMicrosoft SQL Server100DTSBinn;
C:Program FilesMicrosoft SQL Server100ToolsBinn;
c:Program FilesMicrosoft SQL Server110ToolsBinn;
C:Program FilesNVIDIA GPU Computing ToolkitCUDAv4.0bin;
C:Program FilesSystem Center Operations Manager 2007;
C:Program FilesTortoiseSVNbin;
C:ProgramDataNVIDIA CorporationNVIDIA GPU Computing SDK 4.0Ccommonbin;

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

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

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

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

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

ーーー

■考察

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

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

中身は

@echo off
set PATH=%PATH%;C:Program Files (x86)JavaFXjavafx-sdk1.3bin;・・・略

のように記述。

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

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

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

ーーー

■まとめ

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

以上

 

 

FXカテゴリの最新記事