2016-08-05 24 views
7

.issスクリプトを使用して、exeファイルをInno Setup Compilerに作成しています。ここでInno Setupコンパイラ長いパスで "指定されたパスが見つかりません"エラー

The system cannot find the path specified.

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

私は、コンパイル、私はこのエラーが表示されます。私はので、私はこのようになります[Files]下の行を持って、このアプリケーションにいくつかのnode_modulesをパッケージ化する必要がありますコンパイラ出力:

Compiler Output

したがって、は、中止するまでうまく動作するようにと表示されます。私の最初の考えは、browser.jsは存在しないが、二重検査の後ではそうではないということだった。また、ソースパスにワイルドカードを使用していますので、コンパイラはファイルが存在することを知っていますが、が圧縮されているようです。

は、ファイルのパスの長さに問題がある可能性があります。通常、ノードモジュールはネストされた依存関係のため、というばかげたファイルパスの長さを持つになります。この場合、パス長はです。これが問題を引き起こしていると仮定して、それを回避する方法はありますか?

答えて

4

これは間違いなく長いパスのためです。通常、WindowsアプリケーションはMAX_PATH(260文字)より長いパスは処理できません。
MSDNのNaming Files, Paths, and Namespacesを参照してください。

一般的な回避策は、パスの先頭に\\?\という接頭辞を付けることです(上記のMSDNの記事を再度参照してください)。接頭辞は、絶対パスのみに使用できます。しかし、Inno Setupのコンパイラは、Source属性を持つコンパイラのチョークを使用します。 :を探し、:より前のドライブ文字か、compiler:またはuserdocs:のプレフィックスを使用するパスのみを受け入れます。

ボリュームIDを持つUNCパスを使用することで、これをハックすることができます(したがってコロンは使用できません)。

mountvolコマンドを使用して、ソースドライブのUNCパスを検索します。

そして、(コンパイル時ではなく)インストール時に、DestDir属性の長いパスで同じ問題が発生します。コロンに問題はありませんので、単に接頭辞\\?\を使用してください。

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