パス変数のフォルダーが多すぎます


15

奇妙な問題が発生しました-PATH変数が長すぎるために、Visual Studioを起動できず、コマンドプロンプトから簡単なコマンドを実行できません。これで、多くの企業がインストールディレクトリをPATH変数に追加していることがわかりました。

これらの企業がなぜフォルダーをパスに追加したの(おそらくプログラムをより簡単に実行できるようにするために)、そしてどれが必要で削除できるのか疑問に思いました。それらの一部を削除すると、プログラムを起動できなくなりますか?(ここだ現在のパスに存在するもの)


1
私は本当にそれが特に長いとは思わないPATH...それが長すぎると疑う理由は何ですか?VSは何らかのエラーを投げていますか?また、どのバージョンのWindowsを実行していますか?
ボスコ

@boscoコマンドプロンプトではなどの単純なコマンドを見つけることができないため、長すぎると思われpingます。また、これはvisual studioでは珍しいことではないようです。また、言及された、ここでコマンドラインを使用してパスの制限は2000年の周りにあること
CC社

Visual Studio 2012は、起動時に「呼び出しのターゲットによって例外がスローされました」というエラーをスローします。そして、ActivityLog.xmlを見ると、私に言ったThe type initializer for 'Microsoft.VisualStudio.Platform.WindowManagement.WindowManagerService' threw an exception.
CC Inc

2
受け入れ答えでハックやソリューションのすべての種類の#4405091スタックオーバーフローの質問 :)
ボスコ

回答:


13

環境変数PATHのパスの過剰な量を減らすことができます。バックアップとして行全体をメモ帳に保存し、一部を削除してテストします。

それらのほとんどはそこにあるので、ショートカットに「ターゲット」のフルパスが設定されていない場合、「開始」がショートカットで正しく設定されていない場合、またはプログラムとその部品が常に奇妙に起動されている場合見つかりました。ほとんどの状況でフェイルセーフです。パスを削除したプログラムの使用を完全にテストする必要があります。
また、CMDプロンプトにコマンドを入力する人にとって非常に便利です。CDがなくても、その名前のプログラムが検出されて実行されるまで、コンピューターは各場所をスキャンします。または同じ名前の他のコマンド:-)

パスのセットは255(または260)文字未満に制限されていましたが、かなり前に1024に変更され、2048年を処理するためにserver'03時代にパッチバックされ、おそらくいくつかのシステムで8096を処理できましたずっと前に。

人々が遭遇する今日発見された本当の制限は、変数とパスの展開を含むコマンド文字列の長さに制限があるCMDpromptにあります。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspx Microsoftによると:

「ユーザー定義の環境変数の最大サイズは32,767文字です。環境ブロックのサイズに技術的な制限はありません。ただし、ブロックへのアクセスに使用されるメカニズムに応じて実際的な制限があります。たとえば、バッチファイルコマンドラインの最大長より長い変数を設定することはできません。」

その場所では、システムパスを含むレジストリの場所を指しますHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 。そこで残りの部分を読み取る必要があります。

CMDpromptとバッチの制限は、一度展開すると2048文字であり、新しいシステムの4倍と言われています(人々がそれを見ないので引用が必要です)

古いシステムのコマンドプロンプトとバッチの長さについては、http://support.microsoft.com/kb/830473も参照してください

そこでエントリが正しいことを確認するために、wikiには次のように書かれています:http :
//en.wikipedia.org/wiki/Environment_variable

%PATH%この変数には、コマンドインタープリターが特定のコマンドに一致する実行可能ファイルを検索するディレクトリのセミコロン区切り(間にスペースを入れない)リストが含まれます。パスを表す環境変数は、PATH変数内にネストできますが、間接レベルは1レベルのみです。このサブパス環境変数自体にパスを表す環境変数が含まれている場合、PATHは変数置換で適切に展開されません。

そこにすべての余分なパスがあると、特定の事柄がかなり遅くなります。それは、あきらめる前にそれらのすべての場所を調べることを余儀なくされるからです。バッチ処理やCMDpromptを使用する場合でも、ファイルアイテムを呼び出すときは常にフルパスを使用する方が常に高速です。

古いDOSlike 8.3規則を使用することは、サイズを縮小する1つの方法 です。このバッチ/programming//a/20362922はうまく機能します。(もう一度)元の文字列をバックアップしてください。その質問の他の可能な解決策も参照してください。

これが私の見た目です、もっと悪いです。
%SystemRoot%\ system32;%SystemRoot%;%SystemRoot%\ System32 \ Wbem;%SYSTEMROOT%\ System32 \ WindowsPowerShell \ v1.0 \; C:\ Program Files(x86)\ QuickTime \ QTSystem \

私はクイックタイムをハートビートで投げます、そしてAMDプログラムは以前に拡張パスを入れて、それを投げました、Adobeeは1つを持っていました、これらのどれも標準のGUIショートカット/アイコン方法には関係ありませんでした。多くのものを削除してから、すべての機能をテストできます。CMDプロンプトに入力して呼び出した場合、それらのパスを削除することはできません。


パスを削除してもアプリケーションは失敗しないと言っているのですか?
CC Inc

Windows 7の64ビット
CC社

既にアンインストールされていることがわかっているものはありますか?Qt、AMd、Nividiaを取り出して(バックアップした後)mabeyを取り出して、それが十分に短いかどうかを確認しますか?私は私に投稿した、それは約140文字です。
サイコギーク

さて、私は...わかります
CC社

3
制限は2048文字のようです。それ以降は、環境変数GUIにこれ以上文字を入力できません。
Mateen Ulhaq

9

私のパスにはいくつかのソフトウェア開発関連の環境変数があり、それらはすべて重要です。

上記の解決策は私にとってはうまくいかないので、ディレクトリジャンクションに行きました:

  • PATHで最長のパスをいくつか選択します(C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\
  • ジャンクションを保存する小さなフォルダーを作成します:c:\ d \
  • 長いパスの短いジャンクションを作成します。

mklink / jc:\ d \ sql "C:\ Program Files(x86)\ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \"

15個のパスでこれを行うと、PATHが2045文字から1285文字に減少しました。

ジャンクションがパス内に残っているため、最終的にマシンからものをアンインストールするときに問題になる場合があり、それらを手動でクリーンアップする必要があります。


1
かなり典型的な開発環境、最新のVS +いくつかの古いバージョン、およびSQLサーバーがインストールされています。これが、これまでのところ最良のソリューションです。トスの道への受け入れられた答えはばかげている。
メッシュ

C:\ Program Files(x86)\ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \のレジストリパスエントリを何に変更しましたか?c:\ d \ sql?
OutOFTouch

PATH環境変数を意味する場合、はい。SQL Serverのディレクトリへの他の参照を混乱させませんでした。
ジュリアーノ

ハードリンクに関する小さなチュートリアルを次に示し
howto

1

パスで許容される最大長ははるかに長いですが、このトピック(およびMicrosoftの参考文献)のStack Overflowの正式な回答では、2048バイトの最大拡張パス値が機能し、それを超えると問題が発生することを示しています。「拡張された」とは、%区切り文字で示された変数の値が挿入されて拡張値になることを意味し、拡張された合計長は2048バイトを超えてはなりません。私は、それが引き起こす問題の種類(Windows 7の時点)に気付いています:

  • 値の最後のパスを認識しません
  • PATH値を変更するソフトウェアまたはパッチをインストールすると、ランタイム値がNULLになるため、スタートメニュー、デスクトップ、タスクバーのすべてのアイコンが画像を失い、「 ping」または「ipconfig」showコマンドがエラーを認識しません
  • PATH値に依存するアプリケーションプログラムが失敗する

個人的には、Windows以外のオペレーティングシステムをお勧めしますが、それにこだわっている場合は、パスエントリを削除し、何も破損しないことを確認するためにテストし、パス値を2048バイトに下げなければなりません。


これが著者の質問にどのように答えるのか、少なくともそれ以上に、既存の答えがどのように答えるのかは明確ではありません。
ラムハウンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.