Zu viele Ordner in der Pfadvariablen

15

Es ist ein seltsames Problem aufgetreten. Ich kann Visual Studio nicht starten und auch keine einfachen Befehle über die Eingabeaufforderung ausführen, da meine PATH-Variable anscheinend zu lang ist. Nun, da ich es mir anschaue, sehe ich, dass viele Unternehmen ihre Installationsverzeichnisse der PATH-Variablen hinzugefügt haben.

Ich habe mich gefragt, warum diese Firmen ihre Ordner zum Pfad hinzugefügt haben (vielleicht, um die Ausführung ihrer Programme zu vereinfachen?) Und welche notwendig sind und welche ich löschen kann. Kann ich die Programme nicht starten, wenn ich einige davon lösche? ( Folgendes ist aktuell im Pfad vorhanden)

CC Inc
quelle
1
Ich glaube wirklich nicht, dass das besonders lang ist PATH... Was lässt Sie vermuten, dass es zu lang ist? Wirft VS einen Fehler aus? Welche Windows-Version verwenden Sie?
Bosco
@bosco Ich vermute, es ist zu lang, weil die Eingabeaufforderung einfache Befehle wie nicht finden kann ping. Auch bei Visual Studio scheint dies keine Seltenheit zu sein . Es wurde auch hier erwähnt , dass das Limit für den PATH über die Kommandozeile bei 2000 liegt.
CC Inc
Visual Studio 2012 gibt beim Start den Fehler "Ausnahme wurde durch Ziel eines Aufrufs ausgelöst" aus. Und als ich in die ActivityLog.xml schaute, sagte es mirThe type initializer for 'Microsoft.VisualStudio.Platform.WindowManagement.WindowManagerService' threw an exception.
CC Inc
2
Alle Arten von Hacks und Lösungen in der akzeptierte Antwort von Stack Overflow Frage # 4405091 :)
bosco

Antworten:

13

Es ist möglich, die übermäßige Anzahl von Pfaden in den Umgebungsvariablen PATH zu reduzieren. Speichern Sie einfach die gesamte Zeile auf einem Notizblock, sichern Sie sie und entfernen Sie einige und testen Sie sie.

Die meisten von ihnen gibt es also, wenn für eine Verknüpfung kein vollständiger Pfad für das "Ziel" festgelegt ist, wenn die Verknüpfung nicht richtig für "Start In" festgelegt ist oder wenn ein Start auf ungewöhnliche Weise durchgeführt wird, und ihre Teile und Teile immer gefunden. In den meisten Situationen ist es ausfallsicher. Sie möchten dennoch die Verwendung eines Programms, dessen Pfade Sie entfernt haben, vollständig testen.
Es ist auch sehr nützlich für Leute, die Befehle in CMDprompt eingeben, auch ohne CD. Der Computer durchsucht jeden Ort, bis ein Programm mit diesem Namen gefunden und ausgeführt wird. Oder irgendein anderes gleichnamiges Kommando :-)

Dieser Satz von Pfaden war (anchient) auf weniger als 255 (oder 260) Zeichen beschränkt, der vor einiger Zeit auf 1024 geändert wurde. Dann wurde er in der Server'03-Ära gepatcht, um 2048 zu handhaben, und er konnte angeblich sogar 8096 auf einigen Systemen handhaben vor langer Zeit.

Die wirklichen Einschränkungen, auf die Menschen heute stoßen, liegen im CMDprompt, das die Länge der Befehlszeichenfolge begrenzt, einschließlich der Erweiterung der Variablen und Pfade.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspx hier sagt Microsoft:

"Die maximale Größe einer benutzerdefinierten Umgebungsvariablen beträgt 32.767 Zeichen. Es gibt keine technische Beschränkung für die Größe des Umgebungsblocks. Abhängig vom Mechanismus, der für den Zugriff auf den Block verwendet wird, gibt es jedoch praktische Grenzen. Beispiel: Eine Batchdatei kann keine Variable festlegen, die länger als die maximale Befehlszeilenlänge ist. "

An dieser Stelle verweisen sie auf die Registrierungsstelle, die die Systempfade enthält. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment Den Rest müssen sie dort lesen.

Die CMDprompt- und Batch-Beschränkung beträgt 2048 Zeichen, sobald sie erweitert wurden, und soll das 4-fache der neueren Systeme betragen.

Siehe auch http://support.microsoft.com/kb/830473 , in dem die Eingabeaufforderung und die Stapellänge für ältere Systeme erläutert werden.

Um sicherzustellen, dass die Einträge dort korrekt sind, hat das Wiki Folgendes zu sagen:
http://en.wikipedia.org/wiki/Environment_variable

% PATH% Diese Variable enthält eine durch Semikolons getrennte Liste von Verzeichnissen ( keine Leerzeichen dazwischen ), in denen der Befehlsinterpreter nach einer ausführbaren Datei sucht, die dem angegebenen Befehl entspricht. Umgebungsvariablen, die Pfade darstellen, können in der PATH-Variablen verschachtelt sein, jedoch nur auf einer Indirektionsebene. Wenn diese Unterpfad-Umgebungsvariable selbst eine Umgebungsvariable enthält, die einen Pfad darstellt, wird PATH in der Variablensubstitution nicht ordnungsgemäß erweitert.

All die zusätzlichen Pfade verlangsamen bestimmte Dinge um einiges, weil es dann gezwungen ist, an all diesen Stellen nachzuschauen, bevor es aufgibt. Die Verwendung vollständiger Pfade beim Aufrufen von Dateielementen ist immer schneller, auch beim Stapeln oder Verwenden von CMDprompt.

Die Verwendung alter DOSlike 8.3-Konventionen ist eine Möglichkeit, die Größe zu verkleinern. Dieser Stapel /programming//a/20362922 funktioniert gut. Stellen Sie (erneut) sicher, dass Sie die Originalzeichenfolge sichern. Siehe auch die anderen möglichen Lösungen zu dieser Frage.

So sieht meins aus, es war schlimmer.
% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Programme (x86) \ QuickTime \ QTSystem \

Ich würde die Quicktime augenblicklich rauswerfen, und AMDs Programme haben bereits einen erweiterten Pfad angegeben. Adobee hatte einen, keiner dieser Pfade war für Standardmethoden für GUI-Verknüpfungen / -Symbole von Bedeutung. Viele Dinge können entfernt werden, dann testen Sie alle Funktionen. Wenn Sie Dinge durch Eingabe der CMD-Eingabeaufforderung aufrufen, funktioniert das Entfernen dieser Pfade nicht.

Psycogeek
quelle
Sie sagen also, dass die Anwendungen nicht fehlschlagen, wenn ich die Pfade entferne?
CC Inc
Windows 7 64-Bit
CC Inc
Gibt es irgendetwas, von dem Sie wissen, dass es bereits deinstalliert wurde? Nehmen Sie Qt, AMd und Nividia heraus (nachdem Sie es gesichert haben), mabey und sehen Sie, ob es dann kurz genug ist? Ich habe meins gepostet, es sind ungefähr 140 Zeichen.
Psycogeek
Okay, ich werde sehen ..
CC Inc
3
Die Beschränkung scheint 2048 Zeichen zu sein . Danach kann ich keine Zeichen mehr in die GUI für Umgebungsvariablen eingeben.
Mateen Ulhaq
9

Auf meinem Weg befinden sich mehrere Umgebungsvariablen für die Softwareentwicklung, die alle wichtig sind.

Die obige Lösung würde bei mir nicht funktionieren, also habe ich mich für Verzeichnis-Junctions entschieden :

  • Wähle einige der längsten Pfade in meinem PFAD (Gefällt mir C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\)
  • Erstellen Sie einen kleinen Ordner zum Speichern meiner Junctions: c: \ d \
  • Erstellen Sie kurze Abzweigungen für lange Wege:

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

Dadurch wurde mein PFAD auf 15 Pfaden von 2045 auf 1285 Zeichen reduziert.

Es kann ein Problem sein, wenn Sie endgültig Daten von Ihrem Computer deinstallieren, da die Junctions im Pfad verbleiben und Sie sie manuell bereinigen müssen.

Juliano
quelle
1
Ich habe eine ziemlich typische Dev-Umgebung, neueste VS + mehrere ältere Versionen und SQL Server installiert. Dies war bisher die beste Lösung. Die akzeptierte Antwort auf das Wegwerfen von Pfaden ist lächerlich.
Mesh
Wie haben Sie den Registrierungspfadeintrag für C: \ Programme (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ geändert? c: \ d \ sql?
OutOFTouch
Wenn Sie die Umgebungsvariable PATH meinen, dann ja. Ich habe mich nicht mit anderen Verweisen auf die Verzeichnisse von SQL Server herumgetrieben.
Juliano
Hier ist ein nettes kleines Tutorial zu harten Links: howtogeek.com/howto/16226/…
ofer.sheffer
1

Der maximal zulässige Wert im Pfad ist zwar viel länger, ich habe jedoch bei autorisierenden Antworten zum Thema "Stapelüberlauf" (und Microsoft-Referenzen) festgestellt, dass ein maximaler erweiterter Pfadwert von 2048 Byte funktioniert und alles, was länger ist, Probleme verursacht. Mit "erweitert" meine ich, dass alle Variablen, die mit% Trennzeichen gekennzeichnet sind, ihre Werte als erweiterter Wert einfügen und die gesamte erweiterte Länge 2048 Byte nicht überschreiten darf. Ich habe festgestellt, dass die Arten von Problemen (ab Windows 7) sind:

  • Erkennt keine Pfade am Ende des Werts
  • Durch die Installation von Software oder Patches, die den PATH-Wert ändern, wird der Laufzeitwert auf NULL gesetzt, wodurch alle Arten von Problemen unter Windows auftreten, z. Der Befehl ping "oder" ipconfig "show hat keine Fehler erkannt
  • Anwendungsprogramme, die auf PATH-Werten basieren, schlagen fehl

Persönlich empfehle ich andere Betriebssysteme als Windows, aber wenn Sie nicht weiterkommen, müssen Sie Ihre Stunden damit verbringen, Pfadeinträge zu entfernen, zu testen, um sicherzustellen, dass nichts kaputt geht, und den Pfadwert auf 2048 Byte zu senken.

Jay Imerman
quelle
Es ist nicht klar, wie diese Antwort die Frage des Autors beantwortet, zumindest mehr als die vorhandenen Antworten, die tatsächliche Beweise liefern, um ihre Aussagen zu stützen.
Ramhound