0

ファイル/フォルダーとインストール オプションを条件付きで NSIS インストーラーに追加することはできますか? 私の考えでは、フォルダーFooが特定の場所に存在する場合、それをインストーラーに追加し、 Fooをインストールするオプションもインストーラーに追加する必要があります。しかし、フォルダーFooが存在しない場合、NSIS スクリプトはインストーラーを作成するだけで、FooとそこからFooを選択するオプションを残します。

4

3 に答える 3

0

NSIS 2File /NONFATAL /R "c:\foo"では、外部ツールなしで実行できる最善の方法であり、ファイルがないときにセクションを非表示にするために少しハックする必要があります。

!include LogicLib.nsh
Page Components
Page InstFiles

Section "Main"
SetOutPath $InstDir
# File "C:\myfiles\myapp.exe"
SectionEnd

Section "Install Foo" SID_FOO
SetOutPath $InstDir
File /NONFATAL /r "C:\myfiles\foo\*.*"
SectionEnd

Function .onInit
SectionGetSize ${SID_FOO} $0
StrCmp $0 0 "" +3
SectionSetFlags ${SID_FOO} 0 ; Force all flags off including the checkmark
SectionSetText ${SID_FOO} "" ; Hide the section because its size is 0
FunctionEnd

これが受け入れられない場合は!system、cmd.exe を使用して少しヘルプを取得し、何かが存在するかどうかを確認できます。

!tempfile INCEXIST
!system 'if exist "C:\myfiles\foo\*.*" echo !define HAVE_FOO > "${INCEXIST}"'
!include "${INCEXIST}"
!delfile "${INCEXIST}"
!ifdef HAVE_FOO
Section "Install Foo"
SetOutPath $InstDir
File /r "C:\myfiles\foo\*.*"
SectionEnd
!endif

NSIS 3 では!if、/FileExists スイッチがサポートされています。

!if /FileExists "C:\myfiles\foo\*.*"
Section "Install Foo"
SetOutPath $InstDir
File /r "C:\myfiles\foo\*.*"
SectionEnd
!endif
于 2016-03-29T19:41:53.043 に答える
0

/NONFATALを使用してファイルを含めることができます。存在する場合は、コンパイラによって含まれます。実行時に、インストーラーがそれを抽出できたかどうかを確認できます。

File /NONFATAL "file.zip"
${If} ${FileExists}  "$OUTDIR\file.zip"
...
${EndIf}
于 2013-03-01T13:41:38.163 に答える