2016-08-05 35 views
7

Ich verwende ein .iss Skript, um eine exe ​​ Datei innerhalb Inno Setup Compiler zu erstellen. Ich brauche ein paar node_modules in dieser Anwendung zu verpacken, so dass ich eine Linie unter [Files] haben, die wie folgt aussieht:Inno-Setup-Compiler Fehler "Kann den gefunden Pfad nicht finden" Fehler mit langen Pfaden

Source: "{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \ 
    DestDir: "{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs 

Wenn ich kompilieren, erhalte ich diese Fehlermeldung:

The system cannot find the path specified.

Hier der Compiler Ausgabe:

Compiler Output

So, es erscheint, um gut zu laufen bis es abgebrochen wurde. Mein erster Gedanke war, dass die browser.js nicht existiert, aber nach der doppelten Überprüfung ist dies nicht der Fall. Außerdem benutze ich einen Platzhalter im Quellpfad, so dass der Compiler die Datei kennt, existiert, aber es scheint Probleme beim Komprimieren zu haben.

Eine andere Sache, die könnte verursacht das Problem ist die Dateipfadlänge. Knotenmodule haben normalerweise lächerliche Dateipfadlängen wegen geschachtelter Abhängigkeiten. In diesem Fall ist die Pfadlänge . Angenommen, dies ist das Problem, gibt es einen Weg, um es zu umgehen?

Antwort

4

Es ist definitiv wegen eines langen Weges. Normalerweise können Windows-Anwendungen keine Pfade verarbeiten, die länger als MAX_PATH (260 Zeichen) sind.
Siehe Naming Files, Paths, and Namespaces auf dem MSDN.

Eine häufige Problemumgehung ist das Voranstellen des Pfads mit \\?\ (siehe auch den MSDN-Artikel oben). Das Präfix kann nur für absolute Pfade verwendet werden. Aber Inno Setup Compiler drosselt das mit dem Source Attribut. Es sucht nach : und akzeptiert nur Pfade, die entweder nur einen Laufwerksbuchstaben vor dem : haben oder die compiler: oder userdocs: Präfixe verwenden.

Sie können das hacken, indem Sie einen UNC-Pfad mit einer Datenträger-ID verwenden (daher kein Doppelpunkt).

Verwenden Sie den Befehl mountvol, um den UNC-Pfad für Ihr Quelllaufwerk zu finden.

Und dann haben Sie das gleiche Problem mit einem langen Pfad mit dem DestDir Attribut, während der Installation (nicht beim Kompilieren). Da gibt es kein Problem mit dem Doppelpunkt, also können Sie einfach das Präfix \\?\ verwenden.

Source: "\\?\Volume{bb919c3e-bdb1-42b8-9601-6715becd8683}\{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \ 
    DestDir: "\\?\{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs