2017-04-19 11 views
0

私のNSISスクリプトの.onInit関数の中に次のコードブロックがあります。

; Split the supplied artifacts array. 
nsArray::Split ARTIFACT_ARRAY "${ARTIFACTS}" ";" 

${ForEachIn} ARTIFACT_ARRAY $R0 $R1 
    File ${IVY_ROOT}\"$R1" 
${Next} 

$ {}アーティファクトは、時間をコンパイルNSISでANTからプロパティに渡され、基本的にファイルのカンマ区切りリストです。スクリプトをコンパイルしようとすると、以下のエラーが表示されます。

[exec] File: "C:\My_Workspaces\WEnDL\\deployments\ivy\"$R1"" -> no files found. 
[exec] Usage: File [/nonfatal] [/a] ([/r] [/x filespec [...]] filespec [...] | 
[exec] /oname=outfile one_file_only) 
[exec] Error in script "C:\My_Workspaces\WEnDL\/deployments/selections.nsis" on line 394 -- aborting creation process 

+0

ファイルパスの引用符が間違っています。 – Anders

答えて

0

変数はエンドユーザシステムでのみ評価されるため、File命令では変数を使用できません。同じことがプラグインにも当てはまります。コンパイル時に解析するときは、$ {defines}と、!で始まる指示に固執する必要があります。

最良のオプションは、可能な場合は、ビルドシステムがFile命令で.nshを発生させている。

Section 
SetOutPath $InstDir 
!include "generatedfilelist.nsh" 
SectionEnd 

別のオプションは、!systemと外部ツールまたはバッチ・ファイルを呼び出し、彼らはリストを解析してみましょうすることです.nshを生成します。

最後に、NSIS v3ではマクロ再帰と!searchparse + !searchreplaceでこれを取り除くことができますが、利用可能な再帰の深さには制限があるため、リストのファイル数によっては機能しない可能性があります。

関連する問題