ホーム http://cml.s10.xrea.com/

オリジナルは、 こちら (英語)です。

Previous | Contents | Next

4章: スクリプティング リファレンス

4.1 スクリプトファイルの書式

NSIS スクリプトファイル (.nsi) は、スクリプトコードを持つ ただのテキストファイルです。

コマンド

コマンドラインは ”コマンド [パラメーター]” という書式です。

File "myfile"

コメント

;か#で始まる行は コメントです。コマンドの後にコメントを置くことができます。1つ以上の行のコメントを書くために、C-スタイルのコメントも使うことができます。

; コメント
# コメント

# コメント \
    別のコメント行(下の `長いコマンド` セクションを見て下さい)

/*
コメント
コメント
*/

Name /* コメント */ mysetup

File "myfile" ; コメント

もしパラメーターを ;か#で始めたいなら、それを引用符の中に置いてください。

プラグイン

プラグインを呼ぶには、”プラグイン::コマンド [パラメータ]”を使ってください。詳細については、プラグインDLLを見てください。

nsExec::Exec "myfile"

数とみなされるパラメータのために、10進法(数字)か、16進法(それの前に0xを付けたもの、すなわち0x12345AB)か、または8進法( 0でxなしで始まる数字、0321など)を使って下さい。

色は16進法のRGBフォーマットで、HTMLのようだけれども#なしで、セットされるべきです。

IntCmp 1 0x1 lbl_equal

SetCtlColors $HWND CCCCCC

文字列

スペースを持つ文字列を表すには、引用符を使ってください:

MessageBox MB_OK "Hi there!"

もし引用符がパラメータを始めるなら、それはパラメータが入っている特性だけを持っています。それらは、シングルクォート、ダブルクォート、または後方シングルクォートであるかもしれません。

$\ を使ってクォートをエスケープできます:

MessageBox MB_OK "I'll be happy" ; これは文字列の中に ' を置きます
MessageBox MB_OK 'And he said to me "Hi there!"' ; これは文字列の中に " を置きます
MessageBox MB_OK `And he said to me "I'll be happy!"` ; これは文字列の中に ' と " の両方を置きます
MessageBox MB_OK "$\"A quote from a wise man$\" said the wise man" ; これはクォートのエスケープを示しています

$\r, $\n, $\t などの文字列を使って、改行、タブ などを置く事も可能です。より多くの情報...

変数

変数は $ で始まります。ユーザ変数は宣言されなければなりません。

Var MYVAR

StrCpy $MYVAR "myvalue"

より多くの情報...

長いコマンド

コマンドを複数行に広げるには、行末でバックスラッシュ ( \、日本語環境では半角の¥の事) を使います。次の行が事実上 その終わりに連結されます。例えば:

CreateShortCut "$SMPROGRAMS\NSIS\ZIP2EXE project workspace.lnk" \
    "$INSTDIR\source\zip2exe\zip2exe.dsw"

MessageBox MB_YESNO|MB_ICONQUESTION \
    "フォルダ内のファイルを全部削除しますか?\
    (もし保存したいファイルがなければ、\
     「はい」をクリックして下さい。)" \
    IDNO NoRemoveLabel

長いコマンドの為の行の延長は、コメントの為にも同様に働きます。少し頭が混乱するようなものである傾向があるので、避けるべきです。

# コメント \
    ここはまだ コメント ...

コンフィギュレーション ファイル

もしコンフィグディレクトリ中に "nsisconf.nsh"と名付けられたファイルが存在すると、それはデフォルトで(/NOCONFIG コマンドラインパラメーターが使用されない限り)どのスクリプトよりも前にインクルードされます。Windows 上のコンフィグディレクトリは、makensis.exe が入っているのと同じディレクトリです。他のプラットフォームでは、これはインストール時に設定され デフォルトでは $PREFIX/etc/ です。実行時にこれを変える事ができ、詳細については3.1.3 節を見て下さい。

4.2 変数

すべての変数はグローバルで、セクションや関数において使われえます。 デフォルトで、変数が1024文字に制限されることに注意してください。 この制限を拡げるには、NSIS_MAX_STRLENビルド設定をより大きな値にしてNSISをビルドするか、またはスペシャルビルドを使って下さい。

4.2.1 ユーザー変数

$VARNAME

ユーザー変数は Varコマンドによって宣言できます。これらの変数を、値を保存して文字列操作などと共に作業するのに使用できます。

4.2.1.1 Var

[/GLOBAL] var_name

ユーザー変数を宣言します。変数名に使用可能な文字は:[a-z][A-Z][0-9] と '_' です。定義された変数はすべて、たとえセクションや関数中で定義されていても、グローバルです。これをはっきりさせるには、セクションや関数中で定義された変数は /GLOBALフラグを使わなければなりません。/GLOBALフラグは、セクションや関数の外では必要ありません。

Var example

Function testVar
  Var /GLOBAL example2

  StrCpy $example "example value"
  StrCpy $example2 "another example value"
FunctionEnd

4.2.2 その他の書き込み可能な変数

$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9

レジスター。これらの変数はちょうどユーザー変数のように使う事ができますが、普通は共有された関数やマクロにおいて使われます。これらの変数を宣言する必要はないので、共有されたコード中でこれらを使う時に少しも名前が衝突しません。共有されたコード中でこれらの変数を使っている時には、それらのオリジナルな値を保存し復元するために、スタックを使用する事が推奨されます。これらの変数はまた、プラグインとのコミュニケーションのために使われえます。なぜなら、これらはプラグインのDLLによって読んだり書いたりされる事ができるからです。

$INSTDIR

インストールディレクトリー($INSTDIR は StrCpyReadRegStrReadINIStr などを用いて変更可能です。- 例えば、これはインストール場所のより高度な探知を行う為に .onInit 関数で使われるでしょう。)。

アンインストーラーコード中では、$INSTDIR はアンインストーラーが存在するディレクトリーが入っている事に注意して下さい。インストーラー中で持っているのと同じ値を持つ必要はありません。例えば、もしアンインストーラーを $WINDIR に書いてユーザーがそれを移動しないなら、$INSTDIR はアンインストーラーで $WINDIR でしょう。もしアンインストーラーを別の場所に書くなら、インストーラーの $INSTDIR をレジストリー中か代わりの保存方法に保持して、それをアンインストーラーで読むべきです。

$OUTDIR

現在の出力ディレクトリー(SetOutPath 経由で暗黙に、あるいは StrCpyReadRegStrReadINIStr など経由で明示的に設定する)。

$CMDLINE

インストーラーのコマンドライン。コマンドラインの書式は以下のうちの1つであり得ます:

$LANGUAGE

現在使用されている言語の識別子。例えば、英語は 1033。この変数を .onInit で変更できます。

4.2.3 定数

定数は InstallDir 属性においてもまた使われ得ます。

新しい定数のうちのいくつかは、すべてのOSで働くわけではない事に注意して下さい。例えば、$CDBURN_AREA は Windows XP 以降でだけ働きます。もしそれが Windows 98 上で使われると、空になります。さもなければ言及されない限り、定数はすべてのOSで利用可能であるはずです。

$PROGRAMFILES, $PROGRAMFILES32, $PROGRAMFILES64

Program Files ディレクトリー(普通は C:\Program Files だけれど、実行時に検出されます)。Windows x64 では、$PROGRAMFILES と $PROGRAMFILES32 は C:\Program Files (x86) を指し、同時に $PROGRAMFILES64 は C:\Program Files を指します。x64 アプリケーションをインストールしている時には、$PROGRAMFILES64 を使って下さい。

$COMMONFILES, $COMMONFILES32, $COMMONFILES64

Common Files ディレクトリー。これはアプリケーションをまたいで共有されるコンポーネントの為のディレクトリーです(普通は C:\Program Files\Common Files だけれど、実行時に検出されます)。Windows x64 では、$COMMONFILES と $COMMONFILES32 は C:\Program Files (x86)\Common Files を指し、同時に $COMMONFILES64 は C:\Program Files\Common Files を指します。x64 アプリケーションをインストールしている時には、$COMMONFILES64を使って下さい。

$DESKTOP

Windows デスクトップ ディレクトリー(普通は C:\Windows\Desktop だけれど、実行時に検出されます)。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

$EXEDIR

インストーラー実行ファイルが入っているディレクトリー(技術的にはこの変数を変更できますが、それは大抵いい考えではありません)。

$EXEFILE

インストーラー実行ファイルのベース名。

$EXEPATH

インストーラー実行ファイルの完全なパス。

${NSISDIR}

NSIS がインストールされているパスを含むシンボル。もし NSIS ディレクトリーにあるリソース、例えば アイコン、UI などを呼びたいなら、役に立ちます。

makensisとデータを同じ場所に保持するためのサポート付きでコンパイルされた時には( Windows でデフォルト)、それは makensis と同じ場所であり、他のプラットフォームではそれはコンパイル時に設定されます(情報についてはINSTALLファイルを見てください)。両方の場合で、実行時にNSISDIR環境変数を設定する事によってそれを変更できます。詳細については3.1.3 節を見て下さい。

$WINDIR

Windows ディレクトリー(普通は C:\WindowsC:\WinNT だけれど、実行時に検出されます)。

$SYSDIR

Windows システム ディレクトリー(普通は C:\Windows\SystemC:\WinNT\System32 だけれど、実行時に検出されます)。

$TEMP

システム一時ディレクトリー(普通は C:\Windows\Temp だけれど、実行時に検出されます)。

$STARTMENU

スタートメニュー フォルダ(スタートメニュー アイテムを CreateShortCut を使って追加する中で役立ちます)。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

$SMPROGRAMS

スタートメニュー プログラム フォルダ( $STARTMENU\プログラム が欲しい時にはいつでも これを使って下さい)。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

$SMSTARTUP

スタートメニュー プログラム スタートアップ フォルダ。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

$QUICKLAUNCH

IE4 アクティブデスクトップ以降の為の Quick Launch フォルダ。もし Quick Launch が利用可能でなければ、単に $TEMP と同じものを返します。

$DOCUMENTS

My Documents ディレクトリー。現在のユーザーの為の典型的なパスは、C:\Documents and Settings\Foo\My Documents です。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

この定数は、Internet Explorer 4 がインストールされていない Windows 95 では利用できません。

$SENDTO

送る 右クリックメニュー ショートカットアイテムを含むディレクトリー。

$RECENT

ユーザーの最近開いたドキュメントへのショートカットを含むディレクトリー。

$FAVORITES

ユーザーのお気に入りへのショートカットを含むディレクトリー。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

この定数は、Internet Explorer 4 がインストールされていない Windows 95 では利用できません。

$MUSIC

ユーザーのマイ ミュージック ディレクトリー。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

この定数は、Windows XP、ME 以降で利用可能です。

$PICTURES

ユーザーのマイ ピクチャ ディレクトリー。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

この定数は、Windows 2000、XP、ME 以降で利用可能です。

$VIDEOS

ユーザーのマイ ビデオ ディレクトリー。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

この定数は、Windows XP、ME 以降で利用可能です。

$NETHOOD

ネットワークコンピュータ/ネットワーク共有フォルダ中に存在するかもしれないリンクオブジェクトを含むディレクトリー。

この定数は、Internet Explorer 4 とアクティブデスクトップがインストールされていない Windows 95 では利用できません。

$FONTS

システムのフォント ディレクトリー。

$TEMPLATES

ドキュメント テンプレート ディレクトリー。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

$APPDATA

アプリケーション データ ディレクトリー。現在のユーザー パスの検出は Internet Explorer 4 以降を必要とします。すべてのユーザー パスの検出は Internet Explorer 5 以降を必要とします。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

この定数は、Internet Explorer 4 とアクティブデスクトップがインストールされていない Windows 95 では利用できません。

$LOCALAPPDATA

ローカル(非ローミング)アプリケーション データ ディレクトリー。

この定数は、Windows 2000 以降で利用可能です。

$PRINTHOOD

プリンタとFAX中に存在するかもしれないリンクオブジェクトを含むディレクトリー。

この定数は、Windows 95 と Windows 98 では利用できません。

$INTERNET_CACHE

Internet Explorer の Temporary Internet Files ディレクトリー。

この定数は、Internet Explorer 4 とアクティブデスクトップがインストールされていない Windows 95 と Windows NT では利用できません。

$COOKIES

Internet Explorer の Cookies ディレクトリー。

この定数は、Internet Explorer 4 とアクティブデスクトップがインストールされていない Windows 95 と Windows NT では利用できません。

$HISTORY

Internet Explorer の History(履歴) ディレクトリー。

この定数は、Internet Explorer 4 とアクティブデスクトップがインストールされていない Windows 95 と Windows NT では利用できません。

$PROFILE

ユーザーの Profile ディレクトリー。典型的なパスは、C:\Documents and Settings\Foo です。

この定数は、Windows 2000 以降で利用可能です。

$ADMINTOOLS

管理ツールが保持されているディレクトリー。この定数の状況(すべてのユーザーか現在のユーザー)は、SetShellVarContext 設定に依存しています。デフォルトは現在のユーザーです。

この定数は、Windows 2000、ME 以降で利用可能です。

$RESOURCES

テーマとその他の Windows リソースが保存されているリソースディレクトリー(普通は C:\Windows\Resources だけれど、実行時に検出されます)。

この定数は、Windows XP 以降で利用可能です。

$RESOURCES_LOCALIZED

テーマとその他の Windows リソースが保存されているローカライズされたリソースディレクトリー(普通は C:\Windows\Resources\1041 だけれど、実行時に検出されます)。

この定数は、Windows XP 以降で利用可能です。

$CDBURN_AREA

CD に焼かれるのを待っているファイルが保存されているディレクトリー。

この定数は、Windows XP 以降で利用可能です。

$HWNDPARENT

親ウィンドウの10進数 HWND 。

$PLUGINSDIR

プラグインの最初の使用またはInitPluginsDirへの呼び出しにおいて作成された一時的なフォルダへのパス。インストーラが終了する時にこのフォルダは自動的に消去されます。これはこのフォルダを、InstallOptionsのためのINIファイル、スプラッシュプラグインのためのビットマップ、またはプラグインが働くために必要な他のどのようなファイルを保持するのにも、理想的なものにします。

4.2.4 文字列中で使用される定数

$$

$ を表示するのに使います。

$\r

キャリッジリターン (\r) を表示するのに使います。

$\n

改行 (\n) を表示するのに使います。

$\t

タブ (\t) を表示するのに使います。

4.3 ラベル

ラベルは、Goto命令または(IfErrorsMessageBoxIfFileExistsStrCmpといった)様々な分岐命令のターゲットです。ラベルはセクションか関数内になければなりません。ラベルはスコープ中で、それらが在るセクションか関数内からだけ使用可能である事を意味している、ローカルです。ラベルを定義するには、単に以下を使って下さい:

MyLabel:

ラベルは -, +, !, $, 0-9 で始める事はできません。ラベルを必要とする様々な命令のためのラベルを指定している時には、空の文字列("")と 0 の両方が(Gotoがまったく生じないこと意味している)次の命令を表していることを覚えておいて下さい。ピリオド(.)で始まっているラベルは、(インストーラーからアンインストール グローバルラベルに跳ぶことはできない、逆もまた同様、だけれども)どの関数やセクションからでもそれらにジャンプすることができる事を意味している、グローバルです。

4.4 相対的なジャンプ

ラベルと違って 相対的なジャンプは、名前が示唆するように、それらが呼ばれる場所に関連します。ラベルを使うことができる場所ならどこででも相対的なジャンプを使うことができます。相対的なジャンプは数によって表されます。+1は次の命令にジャンプ(デフォルト進行)し、+2は命令を1つスキップして現在の命令から2番目の命令に行き、-2は後ろに命令を2つジャンプし、+10は、現在の命令から10番目の命令にジャンプして命令を9つスキップします。

インストーラーが動いている時、命令は実行時に実行されるすべてのコマンドです。MessageBoxGotoGetDLLVersionFileReadSetShellVarContextは、すべて命令です。AddSizeSectionSectionGroupSectionEndSetOverwrite(とコンパイラーフラグの下のすべて)、NameSetFontLangStringはコンパイル時に実行されるので、これらは命令ではありません。

例:

 Goto +2
   MessageBox MB_OK "決して一度もこのメッセージボックスを見る事は無いでしょう"
 MessageBox MB_OK "直前のメッセージはスキップされ、こいつが表示されるでしょう"
 Goto +4
 MessageBox MB_OK "下のメッセージはスキップされます"
 Goto +3
 MessageBox MB_OK "決して一度もこのメッセージボックスを見る事は無いでしょう"
 Goto -3
 MessageBox MB_OK "おわり"

マクロ挿入が相対的なジャンプに来る時にそれが1つの命令と考えられないことに注意してください。相対的なジャンプが適用される前にマクロが展開されるので、相対的なジャンプは挿入されたマクロの中のコードにジャンプすることができます。例えば、以下のコードはマクロをスキップしません。メッセージボックスを表示します。

!macro relative_jump_test
  MessageBox MB_OK "マクロの1行目"
  MessageBox MB_OK "マクロの2行目"
!macroend

Goto +2
!insertmacro relative_jump_test

4.5 ページ

個々の(非サイレント)NSISインストーラは、ページのセットを持っています。個々のページは、NSISビルトインページか(例えば nsDialogsInstallOptions で)ユーザーの関数によって作成されたカスタムページであるでしょう。

スクリプトを使ってページの順序、外観、動作をコントロールできます。ページをスキップする、ページを白く塗る、一定の条件までユーザーをあるページに留まらせる、readmeページを見せる、入力の為のカスタムデザインページを見せる、あるいはもっと多くの事もできます。このセクションでは、上記のすべてをどのようにコントロールするかを学びます。

ページについて 2つの基本的なコマンド、PageUninstPage があります。1番目はページをインストーラーに追加し、2番目はページをアンインストーラーに追加します。これら2つに加えて、どれかにページとより大量のオプションを追加することを可能にするPageExコマンドがあります。PageExは、デフォルトを使う代わりに追加している具体的なページにオプションをセットすることを可能にし、それはPageExの外で設定されます。

4.5.1 順序付け

ページの順序は、単にスクリプト中のPageUninstPagePageExの出現順序により設定されます。例えば:

 Page license
 Page components
 Page directory
 Page instfiles
 UninstPage uninstConfirm
 UninstPage instfiles

このコードはNSISに、最初にライセンスページ、その次にコンポーネント選択ページ、その次にディレクトリ選択ページ、最後に、ちょうど古いインストーラーにおけるように、セクションが実行されたインストールログを見せる事を教えます。アンインストーラーは、最初にアンインストール確認ページと、その次にアンインストールログを見せます。

何回も同じページタイプを指定できます。

古いNSISスクリプトとの後方互換性のために、もしインストーラページコマンドが全く使われないなら、以下のインストーラページが追加されます:(もしLicenseTextLicenseDataが指定されると)ライセンス、(もしComponentTextが指定されて1つ以上の目に見えるセクションが在れば)コンポーネント、(もしDirTextが指定されると)ディレクトリー、instfiles。アンインストーラページコマンドが全然ない時には、以下のアンインストーラページが追加されます:(もしUninstallTextが指定されると)アンインストール確認ページとinstfiles。この方法は使用を避ける事が望まれており、新しい標準の言語文字列を使うことができるので、スクリプトをページコマンドを使うように変換する事が大いに推奨されます。

4.5.2 ページオプション

各々のページは、それがどのように見えて作動するかを定義する、そのユニークなデータのセットを持っています。 このセクションは、それぞれのタイプのページがどんなデータを使うかそれをどのように設定できるかを述べています。コールバック関数は下で説明されて、このセクション中では扱われません。

下のリストは、コマンドが決まったページタイプにどう作用するかを一覧表にしています。さもなければ言及されない限り、これらのコマンドはPageExブロックの中と外の両方で使用できます。もしPageExブロックの内側で使用されると、それらはPageExで設定されている現在のページだけに作用し、でなければそれらは他のすべてのページでデフォルトを設定します。

ライセンス ページ

コンポーネント選択 ページ

ディレクトリー選択 ページ

アン/インストール ログ ページ

アンインストール確認 ページ

ページキャプションを設定するには Caption を使って下さい。

4.5.3 コールバック

各々のビルトインページは3つのコールバック関数を持っています:pre-関数、show-作成関数、leave-関数です。pre-関数はページが作成される前に直ちに呼ばれ、show-関数はページが作成された後で表示される前に直ちに呼ばれ、leave-関数はユーザーが次へのボタンを押した後でページを去る前に直ちに呼ばれます。

カスタムページはコールバック関数を2つだけ、ページを作成するもので強制的であるもの、ちょうどビルトインページの leave-関数のように働く leave-関数、を持っています。

例:
(訳注:nsDialogsを使いましょう)

 Page license skipLicense "" stayInLicense
 Page custom customPage "" ": custom page"
 Page instfiles

 Function skipLicense
   MessageBox MB_YESNO "Do you want to skip the license page?" IDNO no
     Abort
   no:
 FunctionEnd

 Function stayInLicense
   MessageBox MB_YESNO "Do you want to stay in the license page?" IDNO no
     Abort
   no:
 FunctionEnd

 Function customPage
   GetTempFileName $R0
   File /oname=$R0 customPage.ini
   InstallOptions::dialog $R0
   Pop $R1
   StrCmp $R1 "cancel" done
   StrCmp $R1 "back" done
   StrCmp $R1 "success" done
   error: MessageBox MB_OK|MB_ICONSTOP "InstallOptions error:$\r$\n$R1"
   done:
 FunctionEnd

4.5.4 Page

custom [creator_function] [leave_function] [caption] [/ENABLECANCEL]
  あるいは
internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]

インストーラーページを追加します。ビルトインかカスタムページについてとコールバック関数についての詳細に関しては上記のセクションを見てください。

internal_page_type は以下であり得ます:

インストーラーの最後のページは、混乱を防ぐためにそのキャンセルボタンを無効にされています。どうしても有効にするなら、/ENABLECANCEL を使って下さい。

4.5.5 UninstPage

custom [creator_function] [leave_function] [caption] [/ENABLECANCEL]
  あるいは
internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]

アンインストーラーページを追加します。ビルトインかカスタムページについてとコールバック関数についての詳細に関しては上記のセクションを見てください。

internal_page_typeのあり得る値に関しては Page を見てください。

4.5.6 PageEx

[un.](custom|uninstConfirm|license|components|directory|instfiles)

インストーラーページか、もし un. プリフィックスが使用されるとアンインストーラーページを追加します。すべてのPageExは、対になっている PageExEnd を持っていなければなりません。PageExブロック中で、このページに特有で、他のページで使用されないオプションをセットできます。設定されていないオプションは、PageExブロックの外で設定されたものになるか、もし何も設定されなかったならデフォルトに戻ります。ページのためのサブキャプションを設定するには、デフォルトをセットするのに CaptionSubCaption を使用して下さい。PageExでページセットの為のコールバック関数を設定するには、PageCallbacks を使用して下さい。ビルトインかカスタムページについての詳細に関しては上記のセクションを見てください。

Example usage:

 PageEx license
   LicenseText "Readme"
   LicenseData readme.rtf
 PageExEnd

 PageEx license
   LicenseData license.txt
   LicenseForceSelection checkbox
 PageExEnd

4.5.7 PageExEnd

PageEx ブロックを終わらせます。

4.5.8 PageCallbacks

([creator_function] [leave_function]) | ([pre_function] [show_function] [leave_function])

PageEx を使って定義されたページのためのコールバック関数をセットします。PageEx ブロックの中でだけ使用され得ます。コールバック関数についての詳細に関しては上記のセクションを見てください。

PageEx license
  PageCallbacks licensePre licenseShow licenseLeave
PageExEnd

4.6 セクション

各 NSIS インストーラーが1つ以上のセクションを含んでいます。これらのセクションのそれぞれが、 以下のコマンドで作成、変更、終了されます。

4.6.1 Section コマンド

4.6.1.1 AddSize

size_kb

カレント セクションは追加の "size_kb" キロバイトのディスク容量を必要とする事を インストーラーに教えます。セクションの内側だけで有効です(セクションの外側や関数中では まったく影響しません)。

Section
AddSize 500
SectionEnd

4.6.1.2 Section

[/o] [([!]|[-])section_name] [section_index_output]

新しいセクションを開始します。もし section_name が空か、省略されるか、- で開始されると、 それは隠しセクションでユーザーは無効にするオプションを持ちません。もしセクションの名前が 'Uninstall' であるか 'un.' のプリフィックスを付けられていると、それはアンインストーラー セクションです。もし section_index_output が指定されていると、パラメーターは (SectionSetText などの為に使用され得る)セクション インデックス付きで !defined です(定義されます)。もしセクションの名前が ! で始まると、セクションは太字で 表示されます。もし /o スイッチが指定されると、セクションはデフォルトで選択されていません。

Section "-hidden section"
SectionEnd

Section # hidden section
SectionEnd

Section "!bold section"
SectionEnd

Section /o "optional"
SectionEnd

Section "install something" SEC_IDX
SectionEnd

セクション インデックスを利用するには、中括弧 {} が使用されなければならず コードは スクリプト中でセクションの下になければなりません。

Section test1 sec1_id
SectionEnd

Section test2 sec2_id
SectionEnd

Function .onInit
  SectionGetText ${sec2_id} $0
  MessageBox MB_OK "name of ${sec2_id}:$\n$0" # 'name of 1: test2' を正しく表示します
FunctionEnd
Function .onInit
  SectionGetText ${sec2_id} $0
  MessageBox MB_OK "name of ${sec2_id}:$\n$0" # 'name of ${sec2_id}: test1' を正しく表示しません
    # 以下の警告も出す:
    #   unknown variable/constant "{sec2_id}" detected, ignoring
FunctionEnd

Section test1 sec1_id
SectionEnd

Section test2 sec2_id
SectionEnd

4.6.1.3 SectionEnd

このコマンドは 現在開いているセクションを閉じます。

4.6.1.4 SectionIn

insttype_index [insttype_index] [RO]

このコマンドは、カレント セクションがどのインストール タイプ( InstType を見て下さい)でデフォルトで有効な状態に されるかを指定します。多数の SectionIn コマンドが指定され得ます(それらは組み合わされます)。 もしパラメーターとして RO を指定すると、セクションは、ユーザーがその状態を変更する事が できないことを意味する 読み取り専用になります。InstType を使って定義された最初のインストール タイプが 1 にインデックスを付けられ、次が 2 、などに なります。

InstType "full"
InstType "minimal"

Section "a section"
SectionIn 1 2
SectionEnd

Section "another section"
SectionIn 1
SectionEnd

4.6.1.5 SectionGroup

[/e] section_group_name [index_output]

このコマンドはセクション グループを挿入します。セクション グループは SectionGroupEnd で閉じられなければならず、1つ以上の セクションを含むべきです。もしセクション グループの名前が ! で始まると、その名前はボールド フォントで表示されます。もし /e が存在すると、セクション グループはデフォルトで展開されます。 もし index_output が指定されると、パラメーターは (SectionSetText などの為に使用され得る)セクション インデックス付きで !defined です(定義されます)。もし名前が 'un.' のプリフィックスを付けられていると、 セクション グループはアンインストーラー セクション グループです。

SectionGroup "some stuff"
Section "a section"
SectionEnd
Section "another section"
SectionEnd
SectionGroupEnd

4.6.1.6 SectionGroupEnd

SectionGroup で開かれたセクション グループを閉じます。

4.6.2 Uninstall セクション

アンインストーラーを生成する為に 'Uninstall' と名付けられた特別なセクションが 作成され なければなりません。このセクションは、インストーラーによってインストールされた すべての ファイル、レジストリーキーなどなどを システムから削除すべきです。これは、シンプルな アンインストール セクションの例です:

Section "Uninstall"
  Delete $INSTDIR\Uninst.exe ; 自身を消去する(なぜこれが働くのか下の説明を見て下さい)
  Delete $INSTDIR\myApp.exe
  RMDir $INSTDIR
  DeleteRegKey HKLM SOFTWARE\myApp
SectionEnd

最初の(アンインストーラーを消去している)Delete 命令は 働きます。なぜなら アンインストーラーは、アンインストールの為にシステムのテンポラリー ディレクトリーに透過的にコピーされているからです。

アンインストーラー コード中では $INSTDIR にはアンインストーラーがあるディレクトリーが 入っている事に注意して下さい。インストーラーで入っているのと同じ値が入っている必要は ありません

4.7 関数

関数はセクションと似ていて、0 個以上の命令を含んでいます。ユーザー関数はインストーラーによって 直接には呼ばれず、代わりにセクションから Call 命令を使って呼ばれます。コールバック関数は 決まったイベントが起こった時にインストーラーによって呼ばれます。

関数は セクションや他の関数の外側で宣言されなければなりません。

4.7.1 Function コマンド

4.7.1.1 Function

[function_name]

新しい関数を開始します。"." で始まっている関数名(例えば ".なんでも") は、コールバック関数の為に全般的に予約されています。"un." で始まっている関数名は、 アンインストーラー中で生成される関数です。ゆえに、普通のインストール セクションと関数は アンインストール関数を呼ぶ事ができず、アンインストール セクションとアンインストール関数は 普通の関数を呼ぶ事ができません。

Function func
  # いくつかのコマンド
FunctionEnd

Section
  Call func
SectionEnd

4.7.1.2 FunctionEnd

このコマンドは 現在開いている関数を閉じます。

4.7.2 コールバック関数

インストール中に決まったポイントでインストーラーにより呼ばれる 特別な名前を持っている コールバック関数を作成する事ができます。以下は、現在利用可能なコールバックのリストです:

4.7.2.1 インストール コールバック

4.7.2.1.1 .onGUIInit

このコールバックは、最初のページがロードされインストーラー ダイアログが表示される 直前に 呼ばれ、ユーザー インターフェースの微調整を可能にしています。

例:

 !include "WinMessages.nsh"

 Function .onGUIInit
   # 1028 は the branding text control の id です
   GetDlgItem $R0 $HWNDPARENT 1028
   CreateFont $R1 "Tahoma" 10 700
   SendMessage $R0 ${WM_SETFONT} $R1 0
   # 背景色を白に テキスト色を赤に設定
   SetCtlColors $R0 FFFFFF FF0000
 FunctionEnd
4.7.2.1.2 .onInit

このコールバックは、インストーラーが初期化をほぼ終えた時に呼ばれます。もし '.onInit' 関数が Abort を呼ぶと、インストーラーはすぐさま終了します。

以下は、これがどのように使用されるかの2つの例です:

 Function .onInit
   MessageBox MB_YESNO "This will install. Continue?" IDYES NoAbort
     Abort ; インストーラーを終了させる
   NoAbort:
 FunctionEnd

あるいは:

 Function .onInit
   ReadINIStr $INSTDIR $WINDIR\wincmd.ini Configuration InstallDir
   StrCmp $INSTDIR "" 0 NoAbort
     MessageBox MB_OK "Windows Commander not found. Unable to get install path."
     Abort ; インストーラーを終了させる
   NoAbort:
 FunctionEnd
4.7.2.1.3 .onInstFailed

このコールバックは、インストールが失敗した(ファイルを展開できなかったり、インストール スクリプトが Abort コマンドを使った)後 ユーザーが キャンセル ボタンをクリックした時に 呼ばれます。

例:

  Function .onInstFailed
    MessageBox MB_OK "Better luck next time."
  FunctionEnd
4.7.2.1.4 .onInstSuccess

このコールバックは、インストールが成功し、インストール ウィンドウが閉じる直前(もし AutoCloseWindowSetAutoClose が false にセットされていると ユーザーが 閉じるをクリックした後かもしれない)に 呼ばれます。

例:

  Function .onInstSuccess
    MessageBox MB_YESNO "Congrats, it worked. View readme?" IDNO NoReadme
      Exec notepad.exe ; readme を見る。あるいは、お望みの事を何でも。
    NoReadme:
  FunctionEnd
4.7.2.1.5 .onGUIEnd

このコールバックは、インストーラー ウィンドウが閉じた直後に 呼ばれます。もし必要なら プラグインに関連したユーザー インターフェースを解放するのに使って下さい。

4.7.2.1.6 .onMouseOverSection

このコールバックは、セクション ツリー上でマウス位置が変わった時にはいつでも 呼ばれます。 例えば 各セクションの為の説明をセットする事を可能にします。マウスが上に乗っている セクション id は今 一時的に $0 に保存されています。

例:

  Function .onMouseOverSection
    FindWindow $R0 "#32770" "" $HWNDPARENT
    GetDlgItem $R0 $R0 1043 ; 説明アイテム(UI に追加されなければならない)

    StrCmp $0 0 "" +2
      SendMessage $R0 ${WM_SETTEXT} 0 "STR:first section description"

    StrCmp $0 1 "" +2
      SendMessage $R0 ${WM_SETTEXT} 0 "STR:second section description"
  FunctionEnd
4.7.2.1.7 .onRebootFailed

このコールバックは もし Reboot が失敗すると 呼ばれます。 WriteUninstaller, plug-ins, File, WriteRegBin はこのコールバック中で使用されるべきでは ありません。

例:

 Function .onRebootFailed
   MessageBox MB_OK|MB_ICONSTOP "Reboot failed. Please reboot manually." /SD IDOK
 FunctionEnd
4.7.2.1.8 .onSelChange

component page において選択が変更されると 呼ばれます。 SectionSetFlagsSectionGetFlags と共に使うために役立ちます。

選択の変更は、セクション選択とインストール タイプ変更の両方を含みます。

4.7.2.1.9 .onUserAbort

このコールバックは、ユーザーがキャンセルをクリックして インストールがまだ失敗していない時に 呼ばれます。もしこの関数が Abort を呼ぶと、インストールは 中止されません。

例:

 Function .onUserAbort
   MessageBox MB_YESNO "Abort install?" IDYES NoCancelAbort
     Abort ; インストーラーを終了させない
   NoCancelAbort:
 FunctionEnd
4.7.2.1.10 .onVerifyInstDir

このコールバックは、インストールパスがインストーラーの為に妥当かどうかをコントロールする事を 可能にします。このコードは ユーザーがインストール ディレクトリーを変更すると毎回呼ばれるので、 MessageBox や似たようなもので馬鹿な事を何もすべきでは ありません。もしこの関数が Abort を呼ぶと、$INSTDIR 中の インストールパスは 無効であると考えられます。

例:

  Function .onVerifyInstDir
    IfFileExists $INSTDIR\Winamp.exe PathGood
      Abort ; もし $INSTDIR が winamp ディレクトリーでないなら、そこにインストールしない
    PathGood:
  FunctionEnd

4.7.2.2 アンインストール コールバック

4.7.2.2.1 un.onGUIInit

このコールバックは、最初のページがロードされインストーラー ダイアログが表示される 直前に 呼ばれ、ユーザー インターフェースの微調整を可能にしています。

例に関しては .onGUIInit を見て下さい。

4.7.2.2.2 un.onInit

このコールバックは、アンインストーラーが初期化をほぼ終えた時に呼ばれます。もし 'un.onInit' 関数が Abort を呼ぶと、アンインストーラーはすぐさま終了します。この関数は もし必要なら $INSTDIR の検証 and/or 変更をできる事に注意して下さい。

以下は、これがどのように使用されるかの2つの例です:

  Function un.onInit
    MessageBox MB_YESNO "This will uninstall. Continue?" IDYES NoAbort
      Abort ; アンインストーラーを終了させる
    NoAbort:
  FunctionEnd

あるいは:

  Function un.onInit
    IfFileExists $INSTDIR\myfile.exe found
      Messagebox MB_OK "Uninstall path incorrect"
      Abort
    found:
  FunctionEnd
4.7.2.2.3 un.onUninstFailed

このコールバックは、アンインストールが失敗した(Abort commandを使ったか さもなければ 失敗した)後 ユーザーがキャンセル ボタンをクリックした 時に 呼ばれます。

例:

  Function un.onUninstFailed
    MessageBox MB_OK "Better luck next time."
  FunctionEnd
4.7.2.2.4 un.onUninstSuccess

このコールバックは、アンインストールが成功し、インストール ウィンドウが閉じる直前(もし SetAutoClose が false にセットされていると ユーザーが 閉じるをクリックした後かもしれない)に 呼ばれます。

例:

  Function un.onUninstSuccess
    MessageBox MB_OK "Congrats, it's gone."
  FunctionEnd
4.7.2.2.5 un.onGUIEnd

このコールバックは、アンインストーラー ウィンドウが閉じた直後に 呼ばれます。もし必要なら プラグインに関連したユーザー インターフェースを解放するのに使って下さい。

4.7.2.2.6 un.onRebootFailed

このコールバックは もし Reboot が失敗すると 呼ばれます。 WriteUninstaller, plug-ins, File, WriteRegBin はこのコールバック中で使用されるべきでは ありません。

例:

 Function un.onRebootFailed
   MessageBox MB_OK|MB_ICONSTOP "Reboot failed. Please reboot manually." /SD IDOK
 FunctionEnd
4.7.2.2.7 un.onSelChange

component page において選択が変更されると 呼ばれます。 SectionSetFlagsSectionGetFlags と共に使うために役立ちます。

選択の変更は、セクション選択とインストール タイプ変更の両方を含みます。

4.7.2.2.8 un.onUserAbort

このコールバックは、ユーザーがキャンセル ボタンをクリックして アンインストールがまだ失敗 していない時に 呼ばれます。もしこの関数が Abort を呼ぶと、アンインストールは中止されません。

例:

  Function un.onUserAbort
    MessageBox MB_YESNO "Abort uninstall?" IDYES NoCancelAbort
      Abort ; アンインストーラーを終了させない
    NoCancelAbort:
  FunctionEnd

4.8 インストーラー属性

4.8.1 全般的な属性

以下のコマンドはすべて インストーラーの属性を調整します。これらの属性は、インストーラー中に どのページが存在するかを含めて、各ページの各部分でどんなテキストが表示されるか、インストーラーが どのように名付けられるか、インストーラーがどんなアイコンを使うか、デフォルト インストール ディレクトリー、どんなファイルを書き出すか などのように、インストーラーがどのように見えて 機能するかを コントロールします。これらの属性は セクションと関数中を除いて ファイル中の どこででも設定できる事に注意して下さい。

デフォルトは太字で下線付きです

4.8.1.1 AddBrandingImage

(left|right|top|bottom) (width|height) [padding]

インストーラの上部、下部、左側、右側での 商標イメージ画像を追加します。 そのサイズは、指定された幅/高さ、インストーラの幅/高さ、およびインストーラーのフォントに従って 設定されます。 最終的なサイズは 常にあなたが要求したものになるというわけではありません。 実サイズに関してのコマンドの出力を 見て下さい。 これはインストーラーのフォントに依存するので、AddBrandingImage の前に SetFont を使用するべきです。 デフォルト パディング値は 2 です。

AddBrandingImage はイメージのためにプレースホルダーを加えるだけです。 実行時におけるイメージ自体を設定するには、SetBrandingImage を使用して下さい。

AddBrandingImage left 100
AddBrandingImage right 50
AddBrandingImage top 20
AddBrandingImage bottom 35
AddBrandingImage left 100 5

4.8.1.2 AllowRootDirInstall

true|false

ドライブのルートディレクトリーやネットワーク共有の中に直接 インストールが可能にされるかどうかを 制御します。 ユーザーがインストール (後のアンインストール) ディレクトリーとして C:\ や \\Server\Share を選択できない安全な振舞いを、変更するには 'true' にセットして下さい。 ディレクトリー選択ページのさらなるカスタマイズ能力に関しては、.onVerifyInstDir を見て下さい。

4.8.1.3 AutoCloseWindow

true|false

完了した時 インストール ウィンドウが自動的に閉じるかどうかを セットします。 これは、セクションから SetAutoClose を使ってオーバーライド可能です。

4.8.1.4 BGFont

[font_face [height [weight] [/ITALIC] [/UNDERLINE] [/STRIKE]]]

バックグラウンド グラディエントにテキストを表示するのに使用されるフォントを 指定します。 色を設定するには、BGGradient を使用して下さい。 パラメーターが指定されないと、デフォルト フォントが使用されます。 デフォルト フォントは太字でイタリック体のタイムズ・ニュー・ローマンです。

4.8.1.5 BGGradient

[off|(topc botc [textcolor|notext])]

グラディエント バックグラウンド ウィンドウを使用するかどうかを 指定します。 もし 'off' なら、インストーラーはバックグラウンド ウィンドウを表示しません。 パラメーターが指定されないと、デフォルトの黒から青へのグラディエントが使用されます。 さもなければ、グラディエントを作るのに top_color や bottom_color が使用されます。 top_color と bottom_color は、(HTML 中でのように、16 進数で、# がコメントの為に使用され得るので 先導する '#' だけを引いて) RRGGBB の形を使用することで指定されます。 'textcolor' が同様に指定でき、あるいは 大きな背景テキストを消すには 'notext' を指定できます。

4.8.1.6 BrandingText

/TRIM(LEFT|RIGHT|CENTER) text

インストール ウィンドウの下部に表示されるテキスト(デフォルトで、それは 'Nullsoft Install System vX.XX' )を セットします。 これを空の文字列 ("") にセットすると、デフォルトを使用します。文字列を空白にセットするには、(" ") (スペース)を使って下さい。 もし問題なければ、なぜインストーラーがひどくないのかを 皆が知る事ができるように、デフォルトのままにして下さい。えっ。 コントロールのサイズを文字列のサイズに減らすには /TRIMLEFT、/TRIMRIGHT、/TRIMCENTER を使用して下さい。

変数を受け入れます。 もし変数が使用されるなら、.onInit でそれらを初期化しなければなりません。

4.8.1.7 Caption

caption

PageEx ブロックの外で使用される時: インストーラーのタイトルバーのテキストを セットします。デフォルトでは それは 'Name Setup' で、 ここで Name は Name 命令で指定されます。けれど、それを 'MyApp Installer' や何ででも オーバーライドできます。もし空の文字列 ("") を指定すると、 デフォルトが使用されます(文字列無しにするには " "(スペース)を指定できます)。

PageEx ブロック内で使用される時: カレントページのサブ キャプションを セットします。

変数を受け入れます。 もし変数が使用されるなら、.onInit でそれらを初期化しなければなりません。

4.8.1.8 ChangeUI

dialog ui_file.exe

ダイアログ (IDD_LICENSE, IDD_DIR, IDD_SELCOM, IDD_INST, IDD_INSTFILES, IDD_UNINST, IDD_VERIFY) を ui_file.exe 中の同じリソース ID を持つ dialog で 置き換えます。また、同じ UI ファイルから 同時に7つすべてのダイアログを置き換えたいなら、dialog に 'all' を指定もできます。いくつかの 見本 UI に関しては、NSIS インストール ディレクトリーの下の Contrib\UIs を見て下さい。

ChangeUI all "${NSISDIR}\Contrib\UIs\sdbarker_tiny.exe"

4.8.1.9 CheckBitmap

bitmap.bmp

コンポーネントの選択ページのツリー ビューのチェックに使用されるイメージを持つ ビットマップを指定します。

このビットマップは、96x16 ピクセルのサイズを持ち、8bpp(256 色)より多くなく、異なった状態 (順に: selection mask, not checked, checked, greyed out, unchecked & read-only, checked & read-only)のための6つの 16x16 画像を 含んでいなければなりません。 マスクカラーとして マジェンタを使って下さい(この領域は透明になります)。

4.8.1.10 CompletedText

text

もしパラメーターが指定されるとインストールの終わりに表示される、デフォルト テキスト ("完了")を置き換えます。さもなければ、デフォルトが使用されます。

変数を受け入れます。もし変数が使用されるなら、メッセージが表示される前に 初期化されなければなりません。

4.8.1.11 ComponentText

[text [subtext] [subtext2]]

コンポーネント ページ上のデフォルト テキストを変更するのに 使用されます。

text: インストール アイコンの右、コントロール上のテキスト。

subtext: インストール タイプ選択の横のテキスト。

subtext2: コンポーネント リスト左、インストール タイプ下のテキスト。

もし文字列が空("")なら、デフォルト文字列が使用されます。

変数を受け入れます。もし変数が使用されるなら、コンポーネント ページが作成される前に 初期化されなければなりません。

4.8.1.12 CRCCheck

on|off|force

インストールを可能にする前に インストーラーが自身の CRC チェックを行うかどうかを 指定します。 もし、ユーザーがインストーラーを実行している時に コマンドラインで /NCRC を使って、あなたが 'force' を指定していなかったならば、ユーザーは(潜在的に)途切れたインストーラーを インストールする事を 許されます。

4.8.1.13 DetailsButtonText

show details text

もしパラメーターが指定されると、"Show details" 詳細ボタンのデフォルトのテキストを 置き換えます(さもなければ デフォルトが使用されます)。

変数を受け入れます。もし変数が使用されるなら、インストール ログ(instfiles)ページが 作成される前に 初期化されなければなりません。

4.8.1.14 DirText

[text] [subtext] [browse_button_text] [browse_dlg_text]

ディレクトリー ページ上のデフォルト テキストを変更するのに 使用されます。

text: インストール アイコンの右、コントロール上のテキスト。

subtext: ディレクトリー選択フレーム上の テキスト。

browse_button_text: 参照ボタン上の テキスト。

browse_dlg_text: "参照" ボタンをクリックした後に現れる "フォルダ参照" ダイアログ上の テキスト。

もし文字列が空("")なら、デフォルト文字列が使用されます。

変数を受け入れます。もし変数が使用されるなら、ディレクトリー ページが作成される前に 初期化されなければなりません。

4.8.1.15 DirVar

user_var(dir 入出力)

選択されたディレクトリーが入るのに どの変数が使用されるべきかを 指定します。 この変数には デフォルト値も入るべきです。これは、$INSTDIR の値を出し入れさせる必要のない、 2つの異なったディレクトリーページの容易な作成を 可能にします。デフォルト値は $INSTDIR です。 これは、PageEx 中で directory と uninstConfirm ページのため だけに使用され得ます。

Var ANOTHER_DIR
PageEx directory
  DirVar $ANOTHER_DIR
PageExEnd

Section
  SetOutPath $INSTDIR
  File "a file.dat"
  SetOutPath $ANOTHER_DIR
  File "another file.dat"
SectionEnd

4.8.1.16 DirVerify

auto|leave

`DirVerify leave' が使用されると、インストールディレクトリーが正しくなかったり 十分なスペースが存在しなくても 次へ ボタンは無効にされません。 GetInstDirError を使って leave 関数中で読む事のできるフラグが 代わりにセットされます。

PageEx directory
  DirVerify leave
  PageCallbacks "" "" dirLeave
PageExEnd

4.8.1.17 FileErrorText

file error text

ファイルが書き込めなかった時に出て来るデフォルトテキストを 置き換えます。 この文字列は、ファイル名である $0 への参照を含む事ができます($0 は一時的にこの値に変更されます)。 Example: "Can not write to file $\r$\n$0$\r$\ngood luck, bitch.".

変数を受け入れます。もし変数が使用されるなら、File が使用される前に 初期化されなければなりません。

4.8.1.18 Icon

[path\]icon.ico

インストーラーのアイコンを 設定します。 アイコンファイル中のあらゆるアイコンが インストーラーに含まれます。 アンインストーラーアイコンを設定するには UninstallIcon を使用して下さい。

4.8.1.19 InstallButtonText

install button text

もしパラメーターが指定されると、("Install" の)デフォルトのインストール ボタン テキストを 指定されたテキストで置き換えます。

変数を受け入れます。もし変数が使用されるなら、インストール ボタンが表示される前に 初期化されなければなりません。

4.8.1.20 InstallColors

/windows | (foreground_color background_color)

インストール情報画面の為に使用する色を設定します (デフォルトは 00FF00 000000 です)。 (HTML 中でのように、16 進数で、# がコメントの為に使用され得るので 先導する '#' だけを引いて) RRGGBB の形を使用して下さい。 もし "/windows" が唯一のパラメーターとして指定されると デフォルトの Windows 色が使用される事に注意して下さい。

4.8.1.21 InstallDir

definstdir

デフォルト インストール ディレクトリーをセットします。 この文字列を作るのに使用され得る変数(特に $PROGRAMFILES)に関しては 変数 セクション を見て下さい。 もしユーザーが '参照' を選択すると 最後に \ を続けたこの文字列の部分が使用されて、 インストール時には文字列に追加されて戻っているかもしれない(これを無効にするには、 ディレクトリーを(パラメーター全体が引用符で閉じられている必要がある)\ で終わる)事に 注意して下さい。もしこれの意味が分からないなら、少し参照ボタンと戯れて下さい。

4.8.1.22 InstallDirRegKey

root_key subkey key_name

この属性はインストーラーに レジストリー中で文字列をチェックする事を知らせて、もし文字列が 妥当なら それをインストール ディレクトリーの為に使用します。 もしこの属性が存在すると、もしレジストリーキーが妥当なら InstallDir 属性をオーバーライドして、 さもなければ InstallDir のデフォルトに戻ります。 レジストリーに問い合わせている時、このコマンドは引用符を自動的に削除します。 もし文字列が ".exe" で終わるなら、文字列のファイル名構成要素を自動的に削除します (例えば もし文字列が "C:\program files\poop\poop.exe" なら "C:\program files\poop" を使用します)。 より高度なインストール ディレクトリー コンフィギュレーションに関しては、.onInit で $INSTDIR をセットして下さい。

言語文字列と変数は InstallDirRegKey と共に使用できません。

InstallDirRegKey HKLM Software\NSIS ""
InstallDirRegKey HKLM Software\ACME\Thingy InstallLocation

4.8.1.23 InstProgressFlags

[flag [...]]

flag のための正しい値は、"smooth"(プログレスバーをスムーズにする)か "colored"(プログレスバーを InstallColors でセットされた色で着色する)です。 Examples: "InstProgressFlags" (デフォルトの古い学校の Windows の外見), "InstProgressFlags smooth" (新しいスムーズな外見), "InstProgressFlags smooth colored" (色つきのスムーズな外見 ウィー). 注意: モダンテーマの Windows XP 上でインストーラーが実行している時には、"smooth" と "colored" のどちらも XPStyle on では 働きません。

4.8.1.24 InstType

install_type_name | /NOCUSTOM | /CUSTOMSTRING=str | /COMPONENTSONLYONCUSTOM

インストール タイプ リストにインストール タイプを追加したり、カスタム インストール タイプを 無効にします。それぞれがインストール タイプの名前を指定して 32 タイプまで存在する事が できます。もし名前が 'un.' のプリフィックスを付けられていると、それはアンインストーラー インストール タイプです。名前は、コンポーネント ページが表示される前に実行時に処理される 変数を含む事ができます。実行中に InstType の名前を変更する別のやり方は、 InstTypeSetText コマンドです。違いは、 InstTypeSetText であなたの貴重なユーザー変数を保存 していることです。最初のタイプがデフォルト(一般的に 'Typical'('標準'))です。もし /NOCUSTOM スイッチが指定されると、"custom" インストール タイプが無効にされ ユーザーは予め定義されたインストール タイプのうちの1つを選ばなければなりません。あるいはまた、 もし /CUSTOMSTRING スイッチが指定されると、パラメーターは "Custom" インストール タイプ テキストをオーバーライドします。あるいはまた、もし /COMPONENTSONLYONCUSTOM フラグが指定されると、コンポーネント リストは "Custom" インストール タイプが選択 された場合にだけ 表示されます。

タイプ名の為に変数を受け入れます。もし変数が使用されると、コンポーネント ページが作成 される前に 初期化されなければなりません。

4.8.1.25 LicenseBkColor

color | /gray | /windows

ライセンスデータの背景色を 設定します。 color は、(HTML 中でのように、16 進数で、# がコメントの為に使用され得るので 先導する '#' だけを引いて) RRGGBB の形を使用することで指定されます。 デフォルトは '/gray' です。 また、'/windows' を使用することによって Windows OS 定義色を使用できます。

4.8.1.26 LicenseData

licdata.(txt|rtf)

ユーザーが読む事のできるライセンスの為に使用する テキスト ファイルか RTF ファイルを指定します。 ライセンスを表示させないなら これを省略して下さい。 ファイルは邪悪な DOS テキスト フォーマット (\r\n, yeah!) でなければならない事に注意して下さい。 多言語ライセンス データを定義するには、LicenseLangString を 使用して下さい。

もしライセンス ファイルを RTF ファイルで作るなら、MS Word ではなく ワードパッドで編集するのが推奨されます。 ワードパッドを使用する事で ずっと小さなファイルになります。

あらゆる言語で異なったライセンスを表示するには LicenseLangString を使って下さい。

4.8.1.27 LicenseForceSelection

(checkbox [accept_text] | radiobuttons [accept_text] [decline_text] | off)

表示されたライセンスが 明示的に受諾されなければならないかどうかを 指定します。 これは、チェックボックスかラジオボタンのどちらかによって 成され得ます。 デフォルトでは "次へ" ボタンは無効で、チェックボックスが有効にされるか 適切なラジオボタンが選択された場合にだけ 有効になります。 もし off が指定されると、"次へ" ボタンはデフォルトで有効です。

LicenseForceSelection checkbox
LicenseForceSelection checkbox "i accept"
LicenseForceSelection radiobuttons
LicenseForceSelection radiobuttons "i accept"
LicenseForceSelection radiobuttons "i accept" "i decline"
LicenseForceSelection radiobuttons "" "i decline"
LicenseForceSelection off

4.8.1.28 LicenseText

[text [button_text]]

ライセンス ページでのデフォルト テキストを変更するのに使用します。

text: インストール アイコンの右、コントロール上のテキスト。

button_text: "I Agree" ボタン上のテキスト。

もし文字列が空("")なら、デフォルト文字列が使用されます。

変数を受け入れます。 もし変数が使用されるなら、ライセンス ページが作成される前に 初期化されなければなりません。

4.8.1.29 MiscButtonText

[back button text [next button text] [cancel button text] [close button text]]

4つのボタン(< 戻る、次へ >、キャンセル、閉じる)のためのデフォルト テキスト文字列を 置き換えます。もしパラメーターが省略されると、デフォルトが使用されます。

変数を受け入れます。もし変数が使用されるなら、.onInit 中で 初期化されなければなりません。

4.8.1.30 Name

name [name_doubled_ampersands]

インストーラーの名前をセットします。 名前は普通シンプルに、'MyApp' や 'CrapSoft MyApp' といったプロダクト名です。 もし名前中に 1 つ以上のアンパサンド(&)を持っているなら、2 番目のパラメーターを アンパサンドだけを二重にした同じ名前にセットして下さい。 例えば もしプロダクト名が "Foo & Bar" なら、これを使って下さい:

 Name "Foo & Bar" "Foo && Bar"

もし名前中にアンパサンドを持っていて 名前の為に LangString を 使用するなら、2 番目のパラメーターとして使用するのに 二重アンパサンドを持つ別のものを作成しなければなりません。

変数を受け入れます。 もし変数が使用されるなら、.onInit で 初期化されなければなりません。

4.8.1.31 OutFile

[path\]install.exe

MakeNSIS がインストーラーをそこに書くべきである 出力ファイルを指定します。 これは単に MakeNSIS が書くファイルであり、インストーラーの内容には影響を及ぼしません。

4.8.1.32 RequestExecutionLevel

none|user|highest|admin

Windows Vista の為に求められる実行レベルを指定します。値は インストーラーとアンインストーラーの XML manifest 中に埋め込まれて、Vista とおそらく将来のバージョンの Windows に インストーラーが どの特権レベルを必要とするかを知らせます。 user は管理者特権無しの普通のユーザーレベルを要求します。 highest は現在のユーザーで利用可能な最も高い実行レベルを要求して、Windows に 権限 昇格を検証する為にユーザーにプロンプトを出させます。プロンプトはユーザーのパスワードを 求めるかもしれません。 admin は管理者レベルを要求して、Windows に ユーザーにプロンプトを同様に出させます。 デフォルトでもある none を指定する事は、manifest を空のままにして、どの実行レベルが 求められるかを Windows に決定させます。 Windows Vista は NSIS インストーラーを自動的に認識して、管理者権限が要求されると決定します。 このため、noneadmin が実質的には同じ効果を持ちます。

少なくとも Microsoft によれば、あらゆるアプリケーションが 求められる実行レベルを記されている 事が 推奨されています。記されていないインストーラーは 互換モードを必要とします。 このモードでの回避方法は、ユーザーのスタート メニューに作成されたどのショートカットも すべての ユーザーのスタート メニューへ自動的に移動される事を 含みます。 システム フォルダに何もインストールする必要が無く ローカル マシン レジストリー(HKLM)に何も 書く必要が無い インストーラーは、user 実行レベルを指定するべきです。

このトピックについての詳細は MSDN で見つかります。 キーワードは、"UAC", "requested execution level", "vista manifest", "vista security" を含みます。

4.8.1.33 SetFont

[/LANG=lang_id] font_face_name font_size

インストーラー フォントを 設定します。 あなたが選んだフォントが ユーザーのマシンにもまた存在していなくてはならない事を 覚えておいて下さい。 あなただけが持っているまれなフォントを 使用しないで下さい。

各言語に異なったフォントを設定したいなら /LANG スイッチを使用して下さい。 例えば:

 SetFont /LANG=${LANG_ENGLISH} "English Font" 9
 SetFont /LANG=${LANG_FRENCH} "French Font" 10

すべての言語の為のフォントとフォント サイズが入っている ^Font と ^FontSize という 2 つの LangString があります。

4.8.1.34 ShowInstDetails

hide|show|nevershow

インストールの詳細が表示されるかどうかを セットします。 デフォルトで詳細を隠すには 'hide'、あるいは ユーザーに見るのを許して デフォルトで見せるには 'show'、あるいは 決して見せない 'nevershow' にできます。 セクションがこれを SetDetailsView を使ってオーバーライドできる事に 注意して下さい。

4.8.1.35 ShowUninstDetails

hide|show|nevershow

アンインストールの詳細が表示されるかどうかを セットします。 デフォルトで詳細を隠すには 'hide'、あるいは ユーザーに見るのを許して デフォルトで見せるには 'show'、あるいは 決して見せない 'nevershow' にできます。 セクションがこれを SetDetailsView を使ってオーバーライドできる事に 注意して下さい。

4.8.1.36 SilentInstall

normal|silent|silentlog

インストーラーがサイレントであるべきかどうかを指定します。もし 'silent' か 'silentlog' なら、 SF_SELECTED フラグを持つすべてのセクションが(SectionSetFlags を使ってこのフラグをセットできます)、インストーラー自体から全く画面出力無しで( スクリプトはまだ必要なものは何でも表示でき、 サイレント インストーラーの為にデフォルトを 指定するには MessageBox の /SD を使用して下さい) 黙ってインストールされます。もしこれが 'normal' にセットされ ユーザーがコマンドラインで /S (大文字小文字を区別)付きでインストーラーを実行すると、SilentInstall 'silent' が使用された かのように振る舞う事に注意して下さい。注:LogSet も 見て下さい。

詳細に関しては 4.12 節 を見て下さい。

4.8.1.37 SilentUnInstall

normal|silent

アンインストーラーがサイレントであるべきかどうかを指定します。もし 'silent' か 'silentlog' なら、 アンインストーラー セクションは、アンインストーラー自体から全く画面出力無しで( スクリプトはまだ必要なものは何でも表示でき、 サイレント インストーラーの為にデフォルトを 指定するには MessageBox の /SD を使用して下さい) 黙って実行します。もしこれが 'normal' にセットされ ユーザーがコマンドラインで /S 付きで アンインストーラーを実行すると、SilentUnInstall 'silent' が使用された かのように振る舞う事に注意して下さい。注:LogSet も 見て下さい。

詳細に関しては 4.12 節 を見て下さい。

4.8.1.38 SpaceTexts

[req text [avail text]]

もしパラメーターが指定されると、必要なスペースと利用可能なスペースのテキスト (デフォルトで "Space required: " と "Space available: ")を オーバーライドします。もし必要なスペースとして 'none' が指定されると、スペースのテキストは 表示されません。

変数を受け入れます。もし変数が使用されるなら、コンポーネント ページが作成される前に 初期化されなければなりません。

4.8.1.39 SubCaption

[page_number subcaption]

インストーラーページそれぞれのサブキャプション (0=": License Agreement", 1=": Installation Options", 2=": Installation Directory", 3=": Installing Files", 4=": Completed") を オーバーライドします。もし空の文字列("")を指定すると デフォルトが使用されます (文字列無しにするには " "(スペース)を指定もできます)。

PageEx ブロック内で Caption を使って サブキャプションをセット(あるいは デフォルトをオーバーライド)もできます。

変数を受け入れます。もし変数が使用されるなら、関連するページが作成される前に 初期化されなければなりません。

4.8.1.40 UninstallButtonText

text

アンインストーラー中でデフォルトでは "Uninstall" と言う ボタンのテキストを 変更します。もしパラメーターが指定されなければ、デフォルト テキストが使用されます。 (UninstallEXEName を置き換える)WriteUninstaller も見て下さい。

変数を受け入れます。もし変数が使用されるなら、アンインストール ボタンが表示される前に 初期化されなければなりません。

4.8.1.41 UninstallCaption

caption

アンインストーラーのタイトルバーが表示するものを セットします。デフォルトでは それは 'Name Uninstall' で、ここで Name は Name コマンドで指定されます。 けれど、それを 'MyApp uninstaller' や何ででも オーバーライドできます。もし空の文字列 ("") を指定すると、デフォルトが使用されます(文字列無しにするには " "(スペース)を指定できます)。

変数を受け入れます。もし変数が使用されるなら、un.onInit で初期化されなければなりません。

4.8.1.42 UninstallIcon

[path\]icon.ico

アンインストーラーのアイコンを セットします。

4.8.1.43 UninstallSubCaption

page_number subcaption

アンインストーラー ページのためのデフォルト サブキャプション (0=": Confirmation",1=": Uninstalling Files",2=": Completed") をセットします。もし空の文字列("")を指定すると デフォルトが使用されます (文字列無しにするには " "(スペース)を指定もできます)。

PageEx ブロック内で Caption を使って サブキャプションをセット(あるいは デフォルトをオーバーライド)もできます。

変数を受け入れます。もし変数が使用されるなら、関連するページが作成される前に 初期化されなければなりません。

4.8.1.44 UninstallText

text [subtext]

アンインストール確認ページ上のテキストを 指定します。

text: コントロール上のテキスト。

subtext: アンインストールの場所 の横のテキスト。

変数を受け入れます。もし変数が使用されるなら、アンインストール確認ページが作成される前に 初期化されなければなりません。

4.8.1.45 WindowIcon

on|off

インストーラーのアイコンが表示されているかどうかを セットします。

4.8.1.46 XPStyle

on|off

XP マニフェストがインストーラーに追加されるかどうかを セットします。 Windows XP 上で実行している時、XP マニフェストが インストーラー コントロールに新しい XP スタイルを使用させます。 これはアンインストーラーにも影響します。

4.8.2 コンパイラー フラグ

以下のコマンドは、コンパイラーがどのようにコードを生成しデータを圧縮するかに 影響を及ぼします。 さもなければ 特に言及されない限り、これらのコマンドはスクリプト中のどこででも有効であり、 それが置かれた場所以降のすべての行に(別のコマンドでオーバーライドされるまで)影響を及ぼし ます。フロー制御 命令を使って飛び越す事はできません。.

例えば 以下のスクリプト中で、blah.dat は決して上書きされません。

${If} $0 == 0
  SetOverwrite on
${Else}
  SetOverwrite off
${EndIf}
File blah.dat # ここでは 上書きは常に off

代わりに、以下が使用されるべきです。

${If} $0 == 0
  SetOverwrite on
  File blah.dat
${Else}
  SetOverwrite off
  File blah.dat
${EndIf}

4.8.2.1 AllowSkipFiles

on|off

このコマンドは、ユーザーがファイルをスキップできるべきであるかどうかを 指定します。 もし SetOverwrite が on (デフォルト) にセットされていて インストーラーがファイルを抽出しようとしている時に ファイルを書き込みの為に開けないなら、ユーザーには ファイルをスキップするオプションがあります。 もし off が使用されると ユーザーがファイルをスキップできる無視ボタンが表示されず、ユーザーには インストールを中止する (キャンセル ボタン) か または 書き込みの為にファイルを開く事を再試行する(再試行ボタン) オプションだけがあります。 もし on が使用されると ユーザーには ファイルをスキップするオプションがあります (エラー フラグがセットされます -- SetOverwrite を見て下さい)。

4.8.2.2 FileBufSize

buffer_size_in_mb

このコマンドは、コンパイラーの内部ファイルバッファのサイズを設定します。 このコマンドで、与えられたファイルのどの位を一度にメモリー中にロードするかを 制限する事によって、コンパイラーのメモリー使用量を制御できます。 コンパイラーは入力と出力の両方が必要なので、ファイルバッファの為に与えられたあらゆる時に 指定されたメモリーサイズの 2 倍が使用されるでしょう。 このコマンドは 別の一対の MB を取り得る圧縮バッファを制限しませんし、コンパイラーの他の内部バッファも制限しませんが、通常 それらはなんとしても 1MB を上回るべきではありません。 非常に少ない数を指定すると、性能は減衰するかもしれません。 非常に大きい数を指定すると、システムリソースを使い果たし コンパイラーにコンパイル プロセスのキャンセルを強制するかもしれません。 デフォルト値は 32 MBです。

4.8.2.3 SetCompress

auto|force|off

このコマンドは、インストーラーによってデータが圧縮されるべきかどうかを決定するのに使用される 圧縮フラグをセットします。 例によって SetCompress フラグはそれより後のコマンドに影響を及ぼし、ファイル中の最後の SetCompress コマンドも インストーラーのセクション中と インストーラーのアンインストール データが圧縮されるかどうかを 決定します。 もし compressflag が 'auto' であるなら、圧縮されたサイズが圧縮されていないサイズよりも 小さくなるなら ファイルは圧縮されます。 もし compressflag が 'force' にセットされているなら、圧縮されたバージョンが常に使用されます。 もし compressflag が 'off' であるなら、圧縮は使用されません(より高速であり得ます)。

このオプションは ソリッド圧縮が使用される時には 全く影響を持たない事に注意して下さい。

4.8.2.4 SetCompressor

[/SOLID] [/FINAL] zlib|bzip2|lzma

このコマンドは、インストーラーで ファイル/データ を圧縮するのに使用される 圧縮アルゴリズムを セットします。 セクションと関数の外側で どのデータも圧縮される前に だけ 使用され得ます。 同じインストーラー中で 異なる圧縮方式が 異なるファイルの為に使用され得ます。 コンパイル エラーを避ける為に スクリプトの一番上でそれを使用するのが推奨されます。

3 つの圧縮方式がサポートされています: ZLIB, BZIP2 LZMA です。

ZLIB(デフォルト)は deflate アルゴリズムを使用して、それは速くて単純な方式です。 デフォルト圧縮レベルで 約 300 KB のメモリーを使用します。

BZIP2 は普通、ZLIB よりもより良い圧縮比を与えますが、少し遅くなりより多くのメモリーを使用します。 デフォルト圧縮レベルで 約 4 MB のメモリーを使用します。

LZMA は 非常に良い圧縮比を与える 新しい圧縮方式です。 展開スピードは高く(2 GHz CPU で 10-20 MB/s)、圧縮スピードは遅くなります。 展開の為に使用されるメモリーサイズは、辞書サイズ プラス 数 KB 、デフォルトは 8 MB です。

もし /FINAL が使用されると、次からの SetCompressor への呼び出しは無視されます。

もし /SOLID が使用されると、インストーラーの全てのデータが 1 つのブロック中に 圧縮されます。 これは より強力な圧縮比の結果となります。

4.8.2.5 SetCompressorDictSize

dict_size_mb

LZMA コンプレッサーによって使用される メガバイト(MB)での辞書サイズをセットします (デフォルトは 8 MB)。

4.8.2.6 SetDatablockOptimize

on|off

このコマンドは、コンパイラーに データブロック最適化をするかどうかを教えます。 データブロック最適化は、データ ブロックに追加されているデータが既にデータ ブロック中にある かどうかを見る コンパイラー チェックを持っていて、もしそうなら 追加されるのとは対照的に 単に参照されます(サイズが少しセーブされ得ます)。 このオプションを on のままにするのが強く推奨されます。

4.8.2.7 SetDateSave

on|off

このコマンドは、インストール中に戻せるように、ファイルの最終更新日時を保存するかどうかを決定するのに File コマンドで使用されている ファイルの日付/時間保存フラグを セットします。 有効なフラグは、'on' と 'off' です。'on' がデフォルトです。

4.8.2.8 SetOverwrite

on|off|try|ifnewer|ifdiff|lastused

このコマンドは、ファイルが 存在している既存のあらゆるファイルを上書きすべきかどうかを決定するのに File コマンドで使用されている 上書きフラグを セットします。 上書きフラグが 'on' であるなら、ファイルは上書きされます (これがデフォルトです)。 上書きフラグが 'off' であるなら、既に存在しているファイルは上書きされません。 上書きフラグが 'try' であるなら、もし可能ならファイルは上書きされます (ファイルに書くことができない時に それが何のユーザー操作もなしでスキップされるという事を 意味しています)。 上書きフラグが 'ifnewer' であるなら、既存のファイルが新しいファイルより古い場合にだけ ファイルは上書きされます。 上書きフラグが 'ifdiff' であるなら、既存のファイルが新しいファイルより古いかより新しい場合にだけ ファイルは上書きされます。 'ifnewer' か 'ifdiff' モードの時には SetDateSave が何にセットされているかにかかわらず あて先ファイルの日付がセットされる事に 注意して下さい。

SetOverwrite off
File program.cfg # 上書きしたくない コンフィグ ファイル
SetOverwrite on

4.8.3 バージョン情報

4.8.3.1 VIAddVersionKey

 [/LANG=lang_id] keyname value

ファイル プロパティのバージョン タブ中にフィールドを追加します。システムにより提供された フィールドか ユーザー定義フィールドのどちらかである事ができます。以下のフィールドが システムにより提供されています:

これらのフィールドの名前はターゲットシステム上で翻訳されていますが、ユーザー定義フィールドは 翻訳されないままです。

VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Test Application"
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "A test comment"
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Fake company"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Test Application is a trademark of Fake company"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© Fake company"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Test Application"
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "1.2.3"

4.8.3.2 VIProductVersion

[version_string_X.X.X.X]

ファイルのプロパティ中のバージョン タブの一番上にプロダクト バージョンを追加します。

VIProductVersion "1.2.3.4"

4.9 命令

4.9.1 基本的な命令

NSISがスクリプティングの為に使用する命令は、なんだかPHPとアセンブリの中間のようなものです。本当の高級言語構造物はありませんが、命令自体は(大部分に関しては)ハイレベルで、手ごろで便利な文字列対応力があります(すなわち、文字列の結合などについて心配する必要はありません)。本質的には25のレジスタ(20が汎用、5が特殊用途)と、スタックがあります。

4.9.1.1 Delete

[/REBOOTOK] file

ターゲットシステムから(ファイルかワイルドカードであることができるが、フルパスで指定されなければならない)fileを削除します。もし/REBOOTOKが指定されてファイルが削除できないなら、システムがリブートされる時にファイルが削除されます--もしファイルがリブートにおいて削除されるなら、リブートフラグが設定されます。もしファイルが見つかって削除できないなら、エラーフラグが設定されます。存在しないファイルを削除しようとする事でエラーフラグは設定されません。

Delete $INSTDIR\somefile.dat

4.9.1.2 Exec

command

指定されたプログラムを実行して、そしてすぐに続行します。指定されたファイルはコンパイルしているシステムではなく、ターゲットシステム上に存在しなければならない事に注意して下さい。$OUTDIRは作業ディレクトリーの為に使用されます。もしプロセスが起動できないと、エラーフラグがセットされます。もしコマンドがスペースを持つことができるなら、パラメータからそれを区切るためにそれを引用符中に入れなければならないことに注意して下さい。例えば:Exec '"$INSTDIR\command.exe" parameters'。もしそれを引用符中に置かないと、それはパラメータがあっても無くてもWindows 9x上で働きません

Exec '"$INSTDIR\someprogram.exe"'
Exec '"$INSTDIR\someprogram.exe" some parameters'

4.9.1.3 ExecShell

action command [parameters] [SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED | SW_HIDE]

ShellExecuteを使って指定されたプログラムを実行します。動作は通常"open"、"print"などですが、デフォルト動作を使用する為に空の文字列であることができることに注意して下さい。パラメータと表示タイプはオプションです。$OUTDIRは作業ディレクトリーのために使用されます。もしプロセスが起動できないと、エラーフラグが設定されます。

ExecShell "open" "http://nsis.sf.net/"
ExecShell "open" "$INSTDIR\readme.txt"
ExecShell "print" "$INSTDIR\readme.txt"

4.9.1.4 ExecWait

command [user_var(exit code)]

指定されたプログラムを実行して、実行されたプロセスが終了するのを待ちます。詳細に関してはExecを見て下さい。もし出力変数が指定されないと、もし実行されたプログラムがゼロでないエラーコードを返したり、エラーがあると、ExecWaitはエラーフラグをセットします。もし出力変数が指定されると、ExecWaitは変数に終了コードをセットします(もしエラーが発生すればエラーフラグだけをセットします。すなわち、 もしエラーが発生するとユーザ変数の内容は未定義です)。もしコマンドがスペースを持つことができるなら、パラメータからそれを区切るためにそれを引用符中に入れなければならないことに注意して下さい。例えば:ExecWait '"$INSTDIR\command.exe" parameters'。もしそれを引用符中に置かないと、それはパラメータがあっても無くてもWindows 9x上で働きません

ExecWait '"$INSTDIR\someprogram.exe"'
ExecWait '"$INSTDIR\someprogram.exe"' $0
DetailPrint "some program returned $0"

4.9.1.5 File

[/nonfatal] [/a] ([/r] [/x file|wildcard [...]] (file|wildcard) [...] | /oname=file.dat infile.dat)

現在の出力パス($OUTDIR)に展開されるべきファイルを追加します。

File something.exe
File /a something.exe
File *.exe
File /r *.dat
File /r data
File /oname=temp.dat somefile.ext
File /oname=$TEMP\temp.dat somefile.ext
File "/oname=$TEMP\name with spaces.dat" somefile.ext
File /nonfatal "a file that might not exist"
File /r /x CVS myproject\*.*
File /r /x *.res /x *.obj /x *.pch source\*.*

注: /r スイッチを使っている時、ディレクトリーとファイルのマッチングの 両方がサーチされます。これはワイルドカードを使っても使わなくても、与えられたパスがある ディレクトリーに完全に一致してさえ、常に行われます。それは以下のことを意味しています。
下のディレクトリー構造で:

<DIR> something
  file.dat
  another.dat
<DIR> dir
  something
  <DIR> dir2
    file2.dat
<DIR> another
  <DIR> something
    readme.txt

この File 使用:

File /r something

これは、ルートディレクトリー上で something と名付けられたディレクトリー、 dir と名付けられたディレクトリー中の something と名付けられたファイル、 another と名付けられたディレクトリー中の something と名付けられたファイル に一致します。ルートディレクトリー上で something と名付けられたディレクトリーだけに 一致するには、以下を使って下さい:

File /r something\*.*

\*.* を追加している時、それはマッチング条件として使用され somethingは サーチするディレクトリーとして使用されます。something だけが指定されている時、 カレントディレクトリーがすべてについて再帰的に探され something と名付けられた ディレクトリーと another\something が一致します。

4.9.1.6 Rename

[/REBOOTOK] source_file dest_file

source_file を dest_file にリネームします。ファイルをシステム上のどこかから他のどこにでも 移動するのに使え、ディレクトリーを同じドライブ上の他のどこかへ移動するのに使えます。 dest_file は存在してはならず、さもなければ(/REBOOTOK を使っている場合を除いて)移動は 失敗します。もし /REBOOTOK が指定されてファイルが移動できない(例えば、デスティネーション が存在する)と、ファイルはシステムがリブートする時に移動されます。もしファイルがリブートに おいて移動されるなら、リブートフラグがセットされます。もしファイルがリネームできない(そして /REBOOTOK が使用されていない)か、もしソースファイルが存在しないと、エラーフラグがセット されます。

もし絶対パスが指定されないと、カレントフォルダが使用されます。カレントフォルダは、最後に SetOutPath 命令を使ってセットされたフォルダです。もし SetOutPath を使っていないなら、カレントフォルダは $EXEDIR です。

Rename $INSTDIR\file.ext $INSTDIR\file.dat

4.9.1.7 ReserveFile

[/nonfatal] [/r] [/x file|wildcard [...]] file [file...]

後の使用の為にデータブロック中にファイルを保持します。
ファイルは、それらがスクリプト中に 現れる順で 圧縮されたデータブロックに追加されます。けれど 関数は、必ずしもスクリプト中に 現れる順で 呼ばれる必要はありません。従って、もし早いうちに呼ばれる関数中でファイルを追加 するけれど 関数をスクリプトの終わりに置くならば、必要なファイルを得るために 先に追加された 全てのファイルが展開されなければなりません。もしたくさんのファイルがあると、このプロセスは 長い時間がかかる可能性があります。.onInit がそんな 関数の1つです。他の何が現れるよりも前、まさに開始時に呼ばれます。もしそれをスクリプトの 本当の最後に置いて、そこでいくつかのファイルを展開して、追加されているたくさんのファイルが あると、インストーラーはロードするのにとても長い時間をかけるでしょう。これが、NSIS に 圧縮された データブロックの終わりまで全部を探させる代わりに データブロックの最初に ファイルをインクルードする事によって ロードプロセスをスピードアップすることを可能にする、 このコマンドが役立つ場所です。

パラメーターについての詳細に関しては、 File を見て下さい。

4.9.1.8 RMDir

[/r] [/REBOOTOK] directory_name

指定されたディレクトリー(ワイルドカードを持たない完全なパス)を削除します。/r 無しなら、 ディレクトリーが 完全に空の時にだけ 削除されます。もし /r が指定されるとディレクトリーは 再帰的に削除されるので、指定されたディレクトリー中の 全てのディレクトリーとファイルが 削除されます。もし /REBOOTOK が指定されると、プロセスの間に削除されなかった どのファイルや ディレクトリーも再起動時に削除されます -- もしどれかのファイルかディレクトリーが再起動時に 削除されるなら、リブートフラグがセットされます。もしどれかのファイルかディレクトリーが削除 できないと エラーフラグがセットされます。

RMDir $INSTDIR
RMDir $INSTDIR\data
RMDir /r /REBOOTOK $INSTDIR
RMDir /REBOOTOK $INSTDIR\DLLs

現在の作業ディレクトリーは消去され得ない事に注意して下さい。現在の作業ディレクトリーは SetOutPath によりセットされます。例えば、以下の例は ディレクトリーを消去しません。

SetOutPath $TEMP\dir
RMDir $TEMP\dir

次の例は ディレクトリーの消去に成功します。

SetOutPath $TEMP\dir
SetOutPath $TEMP
RMDir $TEMP\dir

警告: アンインストーラー中での RMDir /r $INSTDIR の使用は 安全では ありません。思いもよらないけれど、ユーザーが Program Files フォルダにインストールする事を 選択するかも知れなくて、それでこのコマンドが アンインストーラーでする事が何もない他の プログラムを含む Program Files フォルダ全体をきれいに消去してしまいます。ユーザーはまた プログラムのファイルでない他のファイルを置く事もでき、それらがプログラムで当然消去される でしょう。インストーラーによってインストールされたファイルだけを 容易にアンインストールする 為の解決法が 利用可能です。

4.9.1.9 SetOutPath

outpath

出力パス ($OUTDIR) をセットして、もし存在しなければ(必要なら再帰的に)作成します。 完全なパス名でなければならず、普通は $INSTDIR だけです( $INSTDIR を 手抜きして "-" で指定できます)。

SetOutPath $INSTDIR
File program.exe

4.9.2 レジストリー、INI ファイル 命令

以下のレジストリー命令のすべてで、regedit.exe で(既定)として表示されるデフォルトキーを 指定するには キーの名前として空の文字列(間に何も入っていない2つの引用符だけ "") を使用して下さい。

もし INI 処理命令のどれかで完全なパスが指定されなければ、Windows ディレクトリーが使われます。

4.9.2.1 DeleteINISec

ini_filename section_name

ini_filename から [section_name] セクション全部を消去します。 もしセクションが ini ファイルから削除できなかったら、エラー フラグがセットされます。 もしセクションが見つからなくても、エラー フラグはセットされません。

WriteINIStr $TEMP\something.ini section1 something 123
WriteINIStr $TEMP\something.ini section1 somethingelse 1234
WriteINIStr $TEMP\something.ini section2 nsis true
DeleteINISec $TEMP\something.ini section1

4.9.2.2 DeleteINIStr

ini_filename section_name str_name

ini_filename で [section_name] セクションから str_name 文字列を消去します。 もし文字列が ini ファイルから削除できなかったら、エラー フラグがセットされます。 もし文字列が見つからなくても、エラー フラグはセットされません。

WriteINIStr $TEMP\something.ini section1 something 123
WriteINIStr $TEMP\something.ini section1 somethingelse 1234
DeleteINIStr $TEMP\something.ini section1 somethingelse

4.9.2.3 DeleteRegKey

[/ifempty] root_key subkey

レジストリーキーを消去します。 もし /ifempty が指定されると、サブキーを全く持たない場合にだけ レジストリーキーが消去されます (さもなければ、レジストリーキー全体が削除されます)。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もしキーがレジストリーから削除できなかったら(あるいは まず第一に存在しなかったら)、 エラー フラグがセットされます。

DeleteRegKey HKLM "Software\My Company\My Software"
DeleteRegKey /ifempty HKLM "Software\A key that might have subkeys"

4.9.2.4 DeleteRegValue

root_key subkey key_name

レジストリー値を消去します。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もし値がレジストリーから削除できなかったら(あるいは まず第一に存在しなかったら)、 エラー フラグがセットされます。

DeleteRegValue HKLM "Software\My Company\My Software" "some value"

4.9.2.5 EnumRegKey

user_var(出力) root_key subkey index

ユーザー変数 $x を root_key\Subkey 中の 'index'番目のレジストリーキーの名前にセットします。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もしこれ以上キーが存在しなかったら 空の文字列を返し、もしエラーが存在すると 空の文字列を返して エラー フラグをセットします。

StrCpy $0 0
loop:
  EnumRegKey $1 HKLM Software $0
  StrCmp $1 "" done
  IntOp $0 $0 + 1
  MessageBox MB_YESNO|MB_ICONQUESTION "$1$\n$\nMore?" IDYES loop
done:

4.9.2.6 EnumRegValue

user_var(出力) root_key subkey index

ユーザー変数 $x を root_key\Subkey 中の 'index'番目のレジストリー値の名前にセットします。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もしこれ以上 値が存在しなかったら あるいは エラーが存在したら、空の文字列を返してエラー フラグをセットします。

StrCpy $0 0
loop:
  ClearErrors
  EnumRegValue $1 HKLM Software\Microsoft\Windows\CurrentVersion $0
  IfErrors done
  IntOp $0 $0 + 1
  ReadRegStr $2 HKLM Software\Microsoft\Windows\CurrentVersion $1
  MessageBox MB_YESNO|MB_ICONQUESTION "$1 = $2$\n$\nMore?" IDYES loop
done:

4.9.2.7 ExpandEnvStrings

user_var(出力) string

string 中の環境変数を $x ユーザー変数に展開します。 もし環境変数が存在しないなら、置き換えられません。 例えば もし "%var%" を使って var が存在しないと、結果は "%var%" です。 もしエラーが存在すると、変数は空にセットされて エラー フラグがセットされます。

ExpandEnvStrings $0 "WINDIR=%WINDIR%$\nTEMP=%TEMP%"

4.9.2.8 FlushINI

ini_filename

INI ファイルのバッファをフラッシュします。 Windows 9x は INI ファイルへの全ての変更をメモリー中に保持しています。 このコマンドは、変更をすぐさまディスクへ書かせます。 もし INI を手動で編集したり、 WriteINIStr, DeleteINISec, DeleteINStr で変更したすぐ後にそれを 消去、移動、コピー するなら、これを使用して下さい。

WriteINIStr $TEMP\something.ini test test test
FlushINI $TEMP\something.ini
Delete $TEMP\something.ini

4.9.2.9 ReadEnvStr

user_var(出力) name

"name" 環境文字列から読んで、値を $x ユーザー変数にセットします。 もし文字列を読むのにエラーが存在すると、ユーザー変数は空にセットされて エラー フラグが セットされます。

ReadEnvStr $0 WINDIR
ReadEnvStr $1 TEMP

4.9.2.10 ReadINIStr

user_var(出力) ini_filename section_name entry_name

ini_filename の [section_name] 中の entry_name から読んで、値を $x ユーザー変数にセットします。 もしエントリーが見つからないなら、エラー フラグがセットされて $x は空の文字列に決められます。

ReadINIStr $0 $INSTDIR\winamp.ini winamp outname

4.9.2.11 ReadRegDWORD

user_var(出力) root_key sub_key name

レジストリーから 32 ビット DWORD をユーザー変数 $x に読みます。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もし DWORD が存在しなかったら、エラー フラグがセットされて $x は空の文字列(0 である "")にセットされます。 もし値が存在するけれど DWORD ではないなら、それは文字列として読まれて エラー フラグがセット されます。

ReadRegDWORD $0 HKLM Software\NSIS VersionBuild

4.9.2.12 ReadRegStr

user_var(出力) root_key sub_key name

レジストリーからユーザー変数 $x に読みます。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もし文字列が存在しなかったら、エラー フラグがセットされて $x は空の文字列("")に セットされます。 もし値が存在するけれど REG_DWORD 型のものであるなら、それは読まれて文字列に変換されて エラー フラグがセットされます。

ReadRegStr $0 HKLM Software\NSIS ""
DetailPrint "NSIS is installed at: $0"

4.9.2.13 WriteINIStr

ini_filename section_name entry_name value

entry_name=value を ini_filename の [section_name] に書きます。 もし文字列が ini ファイルに書けなかったなら、エラー フラグがセットされます。

WriteINIStr $TEMP\something.ini section1 something 123
WriteINIStr $TEMP\something.ini section1 somethingelse 1234
WriteINIStr $TEMP\something.ini section2 nsis true

4.9.2.14 WriteRegBin

root_key subkey key_name valuedata

このコマンドは、バイナリーデータのブロックをレジストリーに書きます。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 valuedata は 16 進数(例えば DEADBEEF01223211151)でです。 もしバイナリーデータがレジストリーに書けなかったら、エラー フラグがセットされます。 もしレジストリーキーが存在しないと、作成されます。

WriteRegBin HKLM "Software\My Company\My Software" "Binary Value" DEADBEEF01223211151

4.9.2.15 WriteRegDWORD

root_key subkey key_name value

このコマンドは、DWORD(32 ビット整数)をレジストリーに書きます(ユーザー変数が指定され得ます)。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もし DWORD がレジストリーに書けなかったら、エラー フラグがセットされます。 もしレジストリーキーが存在しないと、作成されます。

WriteRegDWORD HKLM "Software\My Company\My Software" "DWORD Value" 0xDEADBEEF

4.9.2.16 WriteRegStr

root_key subkey key_name value

文字列をレジストリーに書きます。詳細に関しては WriteRegExpandStr を見て下さい。

WriteRegStr HKLM "Software\My Company\My Software" "String Value" "dead beef"

4.9.2.17 WriteRegExpandStr

root_key subkey key_name value

文字列をレジストリーに書きます。root_key は以下の内の 1 つでなければなりません:

もし root_keySHCTXSHELL_CONTEXT であるなら、それは、 もし SetShellVarContextall にセットされていると HKLM と、もし SetShellVarContextcurrent にセットされていると HKCU と 置き換えられます。

もし文字列がレジストリーに書けなかったら、エラー フラグがセットされます。 文字列の型は、WriteRegStr については REG_SZ 、WriteRegExpandStr については REG_EXPAND_SZ です。 もしレジストリーキーが存在しないと、作成されます。

WriteRegExpandStr HKLM "Software\My Company\My Software" "Expand String Value" "%WINDIR%\notepad.exe"

4.9.3 一般目的 命令

4.9.3.1 CallInstDLL

dllfile function_name

NSIS 拡張 DLL 、プラグイン内の function_name と名付けられた関数を呼びます。 どのように作るかに関しては example plugin を見て下さい。拡張 DLL は スタックと変数にアクセスできます。 注:自動的に展開してプラグイン DLL を呼ぶには、CallInstDLL の代わりにプラグイン コマンドを使って下さい。

Push "a parameter"
Push "another parameter"
CallInstDLL $INSTDIR\somedll.dll somefunction

より容易なプラグイン処理に関しては、新しい プラグイン呼び出しシンタックス を使って下さい。

4.9.3.2 CopyFiles

[/SILENT] [/FILESONLY] filespec_on_destsys destination_path [size_of_files_in_kb]

インストールしているシステム上で ソースからあて先に ファイルをコピーします。 もしインストール メディアからコピーか、システム上のある場所から別の場所に コピーしたいなら、 $EXEDIR と共に役立ちます。 もしコピー操作が多くの時間を要するなら コピー操作の Windows ステータス ウィンドウを 見るかもしれません(これを無効にするには /SILENT を使って下さい)。 インストーラーがディスク容量要求を概算できるように コピーされるファイルのサイズを(キロバイトで) 指定するのに、最後のパラメーターが使用され得ます。 エラー、または ユーザーがコピーをキャンセルする(/SILENT が省略された時にだけ可能)と、 エラー フラグがセットされます。もし /FILESONLY が指定されると ファイルだけがコピーされます。

常に 完全なパス名がこの命令と共に使用されるべきです。 相対パスの使用は 予測できない結果になります。

CreateDirectory $INSTDIR\backup
CopyFiles $INSTDIR\*.dat $INSTDIR\backup

4.9.3.3 CreateDirectory

path_to_create

指定されたディレクトリーを (もし必要なら再帰的に)作成します。 もしディレクトリーが作成できないと エラー フラグがセットされます。

常に 絶対パスを指定すべきです。

CreateDirectory $INSTDIR\some\directory

4.9.3.4 CreateShortCut

link.lnk target.file [parameters [icon.file [icon_index_number [start_options [keyboard_shortcut [description]]]]]]

オプションのパラメーター 'parameters' を持ち、'target.file' にリンクされるショートカット 'link.lnk' を作成します。ショートカットに使用されるアイコンは 'icon.file, icon_index_number' 、 すなわち デフォルトでは、アイコン設定は icon.file と icon_index_number の両方について 空の文字列を使用します。 start_options は次の内の1つでなければなりません: SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, 空の文字列。 keyboard_shortcut は 'flag|c' の形でなければなりません。ここで flag は(| を使った) 以下の組み合わせであり得ます: ALT, CONTROL, EXT, SHIFT 。 c は使用する文字(a-z, A-Z, 0-9, F1-F24, など)です。この文字列中には スペースを入れる事は できない事に注意して下さい。良い例は "ALT|CONTROL|F8" です。 $OUTDIR が作業ディレクトリーの為に使用されています。ショートカットを作成する前に SetOutPath を使う事によって それを変更できます。 description は、ショートカットの説明か XP で呼ばれるコメントであるべきです。 もしショートカットが作成できないと(すなわち どちらかのパス(リンクかターゲット)が存在しないか、 ほかの何かのエラー)、エラー フラグがセットされます。

CreateDirectory "$SMPROGRAMS\My Company"
CreateShortCut "$SMPROGRAMS\My Company\My Program.lnk" "$INSTDIR\My Program.exe" \
  "some command line parameters" "$INSTDIR\My Program.exe" 2 SW_SHOWNORMAL \
  ALT|CONTROL|SHIFT|F5 "a description"

4.9.3.5 GetDLLVersion

filename user_var(High dword 出力) user_var(Low dword 出力)

"filename" の DLL (あるいは他の バージョン情報を持つあらゆる実行ファイル)から バージョン情報を得ます。成功すると ユーザー出力変数に High と Low の DWORD のバージョン情報をセットします。 失敗すると 出力は空になり エラー フラグがセットされます。 以下の例は、DLL バージョンを読んで その人間が読めるバージョンのものを $0 中にコピーします:

GetDllVersion "$INSTDIR\MyDLL.dll" $R0 $R1
IntOp $R2 $R0 / 0x00010000
IntOp $R3 $R0 & 0x0000FFFF
IntOp $R4 $R1 / 0x00010000
IntOp $R5 $R1 & 0x0000FFFF
StrCpy $0 "$R2.$R3.$R4.$R5"

4.9.3.6 GetDLLVersionLocal

localfilename user_var(High dword 出力) user_var(Low dword 出力)

これは GetDLLVersion と同様で、インストーラーをビルドしているシステムだけに作用します(実際には2つの StrCpy コマンドにコンパイルします)。 2つの出力変数に ビルドシステム上の DLL の DLL バージョン情報をセットします。

4.9.3.7 GetFileTime

filename user_var(High dword 出力) user_var(Low dword 出力)

"filename" の最終更新日時を得ます。成功すると ユーザー出力変数に High と Low の DWORD のタイムスタンプをセットします。失敗すると 出力は空になり エラー フラグがセットされます。

4.9.3.8 GetFileTimeLocal

localfilename user_var(High dword 出力) user_var(Low dword 出力)

これは GetFileTime と同様で、インストーラーをビルドしているシステムだけに作用します(実際には2つの StrCpy コマンドにコンパイルします)。 2つの出力変数に ビルドシステム上のファイルのファイル タイムスタンプをセットします。

4.9.3.9 GetFullPathName

[/SHORT] user_var(出力) path_or_file

ユーザー変数 $x に 指定されたファイルのフルパスを 割り当てます。 もしパラメーターのパス部分が見つからないと、エラー フラグがセットされて $x は空になります。 もし /SHORT が指定されると、パスは短いファイル名の形に変換されます。しかしながら /SHORT が指定されない場合には、パスは長いファイル名の形に変換されません。長いファイル名を得るには、 System プラグインを使って GetLongPathName を呼んで下さい。GetLongPathName は、 Windows 98, Windows 2000 以降でのみ 利用可能である事に注意して下さい。

StrCpy $INSTDIR $PROGRAMFILES\NSIS
SetOutPath $INSTDIR
GetFullPathName $0 ..
DetailPrint $0 # これは C:\Program Files を表示します
GetFullPathName /SHORT $0 $INSTDIR
DetailPrint $0 # これは C:\Progra~1\NSIS を表示します
StrCpy $0 C:\Progra~1\NSIS
System::Call 'kernel32::GetLongPathName(t r0, t .r1, i ${NSIS_MAX_STRLEN}) i .r2'
StrCmp $2 error +2
StrCpy $0 $1
DetailPrint $0 # サポートされている場合、これは C:\Program Files\NSIS を表示します

4.9.3.10 GetTempFileName

user_var(出力) base_dir

ユーザー変数 $x に 一時ファイルの名前を 割り当てます。ファイルが作成されてしまっているので、 すぐに好きなように上書きできます。一時ファイルの名前は きっとユニークです。 もし一時ファイルが Windows temp ディレクトリーよりほかの 別の場所で作成されて欲しいなら、 base_dir を指定して下さい。それでの作業が終わったら ファイルを消去して下さい。

GetTempFileName $0
File /oname=$0 something.dat
# something.dat で何かする
Delete $0

4.9.3.11 SearchPath

user_var(出力) filename

ユーザー変数 $x に 2番目のパラメーターで指定されたファイルのフルパスを 割り当てます。 もしファイルを見つけられないと、エラー フラグがセットされて $x は空になります。 ファイルを捜そうとシステム パスを調べるには SearchPath() を使って下さい。

4.9.3.12 SetFileAttributes

filename attribute1|attribute2|...

'filename' のファイル属性をセットします。 | で組み合わされ得る有効な属性は 以下のものです:

もしファイル属性がセットできない(すなわち ファイルが存在しないか あなたが正しいパーミッションを持っていない)と、エラー フラグがセットされます。 属性だけをセットできます。属性を外す事はできません。もし属性を取り除きたいなら NORMAL を使って下さい。このようにすべての属性が削除されます。このコマンドは ワイルドカードを サポートしません。

4.9.3.13 RegDLL

dllfile [entrypoint_name]

指定された DLL をロードして DllRegisterServer (あるいは 指定された場合 entrypoint_name ) を呼び出します。 もしエラーが生じると(すなわち DLL をロード、OLE を初期化、エントリーポイントを発見できないか、 関数が ERROR_SUCCESS (=0) 以外の何かを返したら)、エラー フラグがセットされます。

現在そのパス中にあるか Windows ディレクトリー中にある その他の DLL に依存する DLL の為のカレント ディレクトリーをセットするには SetOutPath を使って下さい。例えば foo.dll が $INSTDIR 中にある bar.dll に依存しているなら、 これを使って下さい:

 SetOutPath $INSTDIR
 RegDLL $INSTDIR\foo.dll

4.9.3.14 UnRegDLL

dllfile

指定された DLL をロードして DllUnregisterServer を呼び出します。 もしエラーが生じると(すなわち DLL をロード、OLE を初期化、エントリーポイントを発見できないか、 関数が ERROR_SUCCESS (=0) 以外の何かを返したら)、エラー フラグがセットされます。

4.9.4 フロー制御 命令

プログラム実行の流れをコントロールする

4.9.4.1 Abort

user_message

インストールを取り消し、スクリプトの実行を停止し、ステータス表示でuser_messageを表示します。注:特別な事をするためにこれをコールバック関数から使用できます。ページコールバックもまた特殊用途のためにAbortを使います。

Abort
Abort "can't install"

4.9.4.2 Call

function_name | :label_name | user_var(入力)

function_name と名付けられた関数、label_name と名付けられたラベル、 アドレスを指定する変数、を呼びます。アドレスは、 GetCurrentAddressGetFunctionAddressGetLabelAddress によって返されます。Call は、 Return 命令に遭遇した時に返ります。セクションと関数は、 Return 命令で自動的に終わらされます。アンインストーラー 関数はインストーラー関数とセクションから呼ばれる事はできません。逆も同じです。

Function func
  Call :label
  DetailPrint "#1: This will only appear 1 time."
label:
  DetailPrint "#2: This will appear before and after message #1."
  Call :.global_label
FunctionEnd

Section
  Call func
  Return

.global_label:
  DetailPrint "#3: The global label was called"
SectionEnd

4.9.4.3 ClearErrors

エラーフラグをクリアします。

ClearErrors
IfErrors 0 +2
  MessageBox MB_OK "this message box will never show"

4.9.4.4 GetCurrentAddress

user_var(出力)

現在の命令(GetCurrentAddress)のアドレスを得て、出力ユーザー変数中にそれを保存します。 このユーザー変数はその次に、Call や Goto に渡され得ます。

Function func
  DetailPrint "function"
  IntOp $0 $0 + 2
  Call $0
  DetailPrint "function end"
FunctionEnd

Section
  DetailPrint "section"
  DetailPrint "section"
  GetCurrentAddress $0
  Goto callFunc

  DetailPrint "back to section"
  Return

callFunc:
  Call func
  DetailPrint "section end"
SectionEnd

4.9.4.5 GetFunctionAddress

user_var(出力) function_name

関数のアドレスを得て、それを出力ユーザー変数中に保存します。このユーザー変数はその次に、 Call や Goto に渡され得ます。もし GetFunctionAddress の出力であるアドレスに Goto すると、 呼んだ関数には決して戻ってきません(Goto された関数がリターンする時にすぐさま終了します)。

Function func
  DetailPrint "function"
FunctionEnd

Section
  GetFunctionAddress $0 func
  Call $0
SectionEnd

4.9.4.6 GetLabelAddress

user_var(出力) label

ラベルのアドレスを得て、それを出力ユーザー変数中に保存します。このユーザー変数はその次に、 Call や Goto に渡され得ます。関数からアクセス可能なラベルでだけ これをコールするかも しれませんが、(潜在的に危険である)どこからでもコールできる事に注意して下さい。もし GetLabelAddress の出力を Call すると、コードはそれが(関数の終わりで明示的や暗示的に) Return する迄 実行され、Call の後の行に戻される事に注意して下さい。

label:
DetailPrint "label"
GetLabelAddress $0 label
IntOp $0 $0 + 4
Goto $0
DetailPrint "done"

4.9.4.7 Goto

label_to_jump_to | +offset| -offset| user_var(target)

もしラベルが指定されると、'label_to_jump_to:' ラベルに行きます。

もし +offset か -offset が指定されると、ジャンプはオフセット命令によって相対的です。 Goto +1 は次の命令に行き、Goto -1 は前の命令に行く、などです。

もしユーザー変数が指定されると、絶対アドレス(一般的にこの値を GetLabelAddress のような 関数から得たいものでしょう)にジャンプします。コンパイラー フラグ コマンドと SectionIn は 命令ではないので、それらを飛び越して全く効果はありません。

Goto label
Goto +2
Goto -2
Goto $0

4.9.4.8 IfAbort

label_to_goto_if_abort [label_to_goto_if_no_abort]

もし Abort が呼ばれると true を "返し"ます。これは、もしユーザーが作成(や上書き) に失敗したファイルで中止を選択するか、ユーザーが自ら中止すると 起こり得ます。この関数は、 instfiles ページの leave 関数からだけ呼ばれ得ます。

Page instfiles "" "" instfilesLeave

Function instfilesLeave
  IfAbort 0 +2
    MessageBox MB_OK "user aborted"
FunctionEnd

4.9.4.9 IfErrors

jumpto_iferror [jumpto_ifnoerror]

エラーフラグをチェックしてクリアします。そして、もしそれがセットされていれば jumpto_iferror に行き、さもなければ jumpto_ifnoerror に行きます。(使用中のファイルを削除 しようとしているといった)回復可能なエラーが発生した時には、エラーフラグが他の命令によって セットされます。

ClearErrors
File file.dat
IfErrors 0 +2
  Call ErrorHandler

4.9.4.10 IfFileExists

file_to_check_for jump_if_present [jump_otherwise]

(ワイルドカードやディレクトリーであり得る)file_to_check_for ファイルの存在をチェックして、 もしファイルが存在していれば jump_if_present に行き、さもなければ jump_otherwise に行きます。 もしファイルがディレクトリーであるかどうかを見るチェックをしたければ、IfFileExists DIRECTORY\*.* を使って下さい。

IfFileExists $WINDIR\notepad.exe 0 +2
  MessageBox MB_OK "notepad is installed"

4.9.4.11 IfRebootFlag

jump_if_set [jump_if_not_set]

リブート フラグをチェックして、もしリブート フラグがセットされていれば jump_if_set に ジャンプし、さもなければ jump_if_not_set にジャンプします。リブート フラグは、 Delete、Rename、あるいは 手動で SetRebootFlag でセット され得ます。

IfRebootFlag 0 noreboot
  MessageBox MB_YESNO "A reboot is required to finish the installation. Do you wish to reboot now?" IDNO noreboot
    Reboot
noreboot:

4.9.4.12 IfSilent

jump_if_silent [jump_if_not]

サイレント フラグをチェックして、もしインストーラーがサイレントなら jump_if_silent に ジャンプし、さもなければ jump_if_not にジャンプします。サイレント フラグは、 SilentInstall SilentUninstallSetSilent と ユーザーがコマンドラインで /S を渡す事により セットされ得ます。

IfSilent +2
  ExecWait '"$INSTDIR\nonsilentprogram.exe"'

4.9.4.13 IntCmp

val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]

2つの整数 val1 と val2 を比較します。もし val1 と val2 が等しければ jump_if_equal に行き、 あるいは もし val1 < val2 なら jump_if_val1_less に行き、もし val1 > val2 なら jump_if_val1_more に行きます。

IntCmp $0 5 is5 lessthan5 morethan5
is5:
  DetailPrint "$$0 == 5"
  Goto done
lessthan5:
  DetailPrint "$$0 < 5"
  Goto done
morethan5:
  DetailPrint "$$0 > 5"
  Goto done
done:

4.9.4.14 IntCmpU

val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]

2つの符号無し整数 val1 と val2 を比較します。もし val1 と val2 が等しければ jump_if_equal に行き、あるいは もし val1 < val2 なら jump_if_val1_less に行き、もし val1 > val2 なら jump_if_val1_more に行きます。符号無し整数として比較を行います。

4.9.4.15 MessageBox

mb_option_list messagebox_text [/SD return] [return_check jumpto] [return_check_2 jumpto_2]

"messagebox_text"テキストを含んでいるMessageBoxを表示します。mb_option_listは、| によって区切られた、以下のうちの1つ以上でなければなりません(例えばMB_YESNO|MB_ICONSTOP)。

Return_checkは、0(あるいは 空やオフのまま)か、以下のうちの1つであり得ます:

もしMessageBoxの戻り値がreturn_checkであるなら、インストーラーはjumptoに行きます。

インストーラーがサイレントである時に使用されるオプションを指定するには、/SD パラメーターを上記のreturn_check値のうちの1つと共に使って下さい。詳細は4.12 節を見て下さい。

MessageBox MB_OK "simple message box"
MessageBox MB_YESNO "is it true?" IDYES true IDNO false
true:
  DetailPrint "it's true!"
  Goto next
false:
  DetailPrint "it's false"
next:
MessageBox MB_YESNO "is it true? (defaults to yes on silent installations)" /SD IDYES IDNO false2
  DetailPrint "it's true (or silent)!"
  Goto next2
false2:
  DetailPrint "it's false"
next2:

4.9.4.16 Return

関数やセクションから戻ります。

Function func
  StrCmp $0 "return now" 0 +2
    Return
  # do stuff
FunctionEnd

Section
  Call func
  ;"Return" will return here
SectionEnd

4.9.4.17 Quit

インストーラーをできるだけ早く終了させます。Quitが呼ばれた後、インストーラーは終了します(コールバック関数は実行する機会を得ません)。

4.9.4.18 SetErrors

エラーフラグをセットします。

SetErrors
IfErrors 0 +2
  MessageBox MB_OK "this message box will always show"

4.9.4.19 StrCmp

str1 str2 jump_if_equal [jump_if_not_equal]

str1とstr2を(大文字小文字を区別せずに)比較します。もしstr1とstr2が同じなら、jump_if_equalに行き、さもなければjump_if_not_equalに行きます。

StrCmp $0 "a string" 0 +3
  DetailPrint '$$0 == "a string"'
  Goto +2
  DetailPrint '$$0 != "a string"'

4.9.4.20 StrCmpS

str1 str2 jump_if_equal [jump_if_not_equal]

StrCmpと同じだけれど、大文字小文字を区別します。

4.9.5 ファイル 命令

4.9.5.1 FileClose

handle

FileOpen でオープンされたファイル ハンドルをクローズします。

4.9.5.2 FileOpen

user_var(ハンドル出力) filename openmode

"filename" と言う名前のファイルをオープンして、ハンドル出力変数にハンドルを セットします。openmode は、"r" (リード) "w" (ライト、ファイルの すべての内容が破壊される) "a" (リードとライトの両方の為にオープンされて 内容が保持される事を意味する、アペンド)の内の1つでなければなりません。すべてのオープン モードで、ファイル ポインタはファイルの始めに置かれます。ファイルを開けない場合には、 ハンドル出力は空にセットされて エラー フラグがセットされます。

もし絶対パスが指定されていないと、カレント フォルダが使用されます。カレント フォルダは、 最後に SetOutPath 命令を使ってセットされたフォルダです。 もし SetOutPath を使っていないなら、カレント フォルダは $EXEDIR です。

FileOpen $0 $INSTDIR\file.dat r
FileClose $0

4.9.5.3 FileRead

handle user_var(出力) [maxlen]

FileOpen でオープンされたファイルから 文字列を読みます。文字列は、改行コード(あるいは 復帰改行コード ペア)が現れるか、ゼロのバイトが読まれるか、(もし指定されていれば)maxlen に達するかの どれかまで読まれます。デフォルトでは、文字列は 1024 文字に制限されています (より大きな NSIS_MAX_STRLEN を持つ スペシャル ビルドが コンパイルやダウンロードできます)。 もし EOF が読まれたり データが無くなると、出力データは空になり エラー フラグがセットされます。

ClearErrors
FileOpen $0 $INSTDIR\file.dat r
IfErrors done
FileRead $0 $1
DetailPrint $1
FileClose $0
done:

4.9.5.4 FileReadByte

handle user_var(出力)

FileOpenで開かれたファイルから 1バイト読みます。 バイトは、整数(0-255)として 出力中に保存されます。もし EOF が読まれたり データが無くなると、出力データは空になり エラー フラグがセットされます。

ClearErrors
FileOpen $0 $INSTDIR\file.dat r
IfErrors done
FileReadByte $0 $1
FileReadByte $0 $2
DetailPrint "$1 $2"
FileClose $0
done:

4.9.5.5 FileSeek

handle offset [mode] [user_var(新しいポジション)]

FileOpen で開かれたファイルを シークします。 mode が省略されるか または SET と指定されるなら、ファイルは ファイルの始めに相対的な "offset" に置かれます。 mode が CUR と指定されるなら、ファイルは 現在のファイル位置に相対的な "offset" に置かれます。 mode が END と指定されるなら、ファイルは ファイルの終わりに相対的な "offset" に置かれます。 最後のパラメーター「新しいポジション」が指定されると、新しいファイル位置がその変数に保存されます。

ClearErrors
FileOpen $0 $INSTDIR\file.dat r
IfErrors done
FileSeek $0 -5 END
FileRead $0 $1
DetailPrint $1
FileClose $0
done:

4.9.5.6 FileWrite

handle string

FileOpen で開かれたファイルに 文字列を書きます。 書き込み中にエラーが発生すると、エラー フラグがセットされます。

ClearErrors
FileOpen $0 $INSTDIR\file.dat w
IfErrors done
FileWrite $0 "some text"
FileClose $0
done:

4.9.5.7 FileWriteByte

handle string

'string' の整数解釈を FileOpen で開かれたファイルに 書きます。 もちろん直接 整数値を入力できます。 以下のコードは 「復帰/改行 コード」 --ファイルに Enter キー -- を書きます。

FileWriteByte file_handle "13"
FileWriteByte file_handle "10"

書き込み中にエラーが発生すると、エラー フラグがセットされます。 整数の Low バイトが使用されている事に注意して下さい。 すなわち 256 を書く事は 0 を書く事と同じなどです。

4.9.5.8 FindClose

handle

FindFirst で開かれたサーチを 閉じます。

4.9.5.9 FindFirst

user_var(ハンドル出力) user_var(ファイル名出力) filespec

ファイル名出力(ユーザー変数)に見つかった最初のファイルを置いて、'filespec' の探索を行います。 また、ハンドル出力(やはりユーザー変数)に サーチのハンドルを置きます。 もしファイルが見つからないと、両方の出力が空にセットされて エラー フラグがセットされます。 FindNext と FindClose と共に使用されるのが 最良です。 ファイル名出力がパス無しである事に 注意して下さい。

FindFirst $0 $1 $INSTDIR\*.txt
loop:
  StrCmp $1 "" done
  DetailPrint $1
  FindNext $0 $1
  Goto loop
done:

4.9.5.10 FindNext

handle user_var(ファイル名出力)

FindFirst で始められた探索を 継続します。 handle は FindFirst によって返されたハンドル出力変数であるべきです。 サーチが完了している(それ以上のファイルがない)なら、ファイル名出力が空にセットされて エラー フラグがセットされています。 ファイル名出力がパス無しである事に 注意して下さい。

4.9.6 アンインストーラー 命令

4.9.6.1 WriteUninstaller

[Path\]exename.exe

アンインストーラーを指定されたファイル名(とオプションでのパス)に書きます。インストール セクションか関数の内側からだけ有効で、スクリプト中にアンインストール セクションがある必要が あります。アンインストール コンフィギュレーションも見て下さい。アンインストーラーのコピーを 1回以上書き出す為に これを1回以上呼ぶ事ができます。

WriteUninstaller $INSTDIR\uninstaller.exe

4.9.7 種々雑多な命令

4.9.7.1 GetErrorLevel

user_var(エラーレベル出力)

SetErrorLevel によってセットされた最後のエラー レベルか、 もしまったく使用されていないなら -1 を 返します。

GetErrorLevel $0
IntOp $0 $0 + 1
SetErrorLevel $0

4.9.7.2 GetInstDirError

user_var(エラー出力)

ディレクトリー ページの leave 関数中で使用します。 もし 'DirVerify leave' が使用されているとセットされる フラグを読みます。あり得る値は以下です:

0: エラー無し

1: 不正なインストール ディレクトリー

2: インストール ドライブに 十分なスペースがありません

!include LogicLib.nsh
PageEx directory
  DirVerify leave
  PageCallbacks "" "" dirLeave
PageExEnd

Function dirLeave
  GetInstDirError $0
  ${Switch} $0
    ${Case} 0
      MessageBox MB_OK "valid installation directory"
      ${Break}
    ${Case} 1
      MessageBox MB_OK "invalid installation directory!"
      Abort
      ${Break}
    ${Case} 2
      MessageBox MB_OK "not enough free space!"
      Abort
      ${Break}
  ${EndSwitch}
FunctionEnd

4.9.7.3 InitPluginsDir

既に初期化済みでない場合、プラグイン ディレクトリー($PLUGINSDIR)を初期化します。

InitPluginsDir
File /oname=$PLUGINSDIR\image.bmp image.bmp

4.9.7.4 Nop

何もしません。

4.9.7.5 SetErrorLevel

error_level

インストーラーやアンインストーラーのエラー レベルを error_level にセットします。 詳しい情報に関しては Error Levels を見てください。

IfRebootFlag 0 +2
  SetErrorLevel 4

4.9.7.6 SetRegView

32|64|lastused

レジストリー コマンドにより影響を受ける レジストリー ビューをセットします。 Windows x64 には 2つのビューがあります。 32 ビット アプリケーションの為のものと x64 アプリケーションの為のものです。 デフォルトでは、x64 システムで WOW64 の下で動く 32 ビットのアプリケーションは、32 ビット ビューだけを利用できます。 SetRegView 64 を使用する事で インストーラーはレジストリーの x64 ビュー中のキーを利用できます。

DeleteRegKey, DeleteRegValue, EnumRegKey, EnumRegValue, ReadRegDWORD, ReadRegStr, WriteRegBin, WriteRegDWORD, WriteRegStr, WriteRegExpandStr に影響を及ぼします。

InstallDirRegKey には影響を及ぼしません。 代わりに、.onInit 中で ReadRegStr を使って レジストリーを読めます。

SetRegView 32
ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion ProgramFilesDir
DetailPrint $0 # prints C:\Program Files (x86)
SetRegView 64
ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion ProgramFilesDir
DetailPrint $0 # prints C:\Program Files
Function .onInit
  SetRegView 64
  ReadRegStr $INSTDIR HKLM Software\NSIS ""
  SetRegView 32
FunctionEnd

4.9.7.7 SetShellVarContext

current|all

$SMPROGRAMS とその他のシェルフォルダーのコンテクストを セットします。 'current' (デフォルト) に設定されると、現在のユーザーのシェルフォルダーが使用されます。 'all' に設定されると、'All Users' のシェルフォルダーが使用されます。 'All Users' フォルダーは、すべての OS でサポートされては いないかもしれません。 'All Users' フォルダーが見つからない場合、現在のユーザーフォルダーが使用されます。 「通常ユーザー」は 'All Users' 領域に書き込む権利を持たない事を 考慮に入れてください。 アドミンだけが 'All Users' 領域への完全なアクセス権を持っています。 UserInfo プラグインを使って これをチェックできます。 例に関しては <NSIS のインストール先>\Contrib\UserInfo\UserInfo.nsi を見てください。

もしインストーラー コード中で使用されると これはインストーラーだけに影響を及ぼし、 アンインストーラー コード中で使用されると これはアンインストーラーだけに影響を及ぼす事に 注意して下さい。両方に影響を及ぼすには、両方で使う必要があります。

SetShellVarContext current
StrCpy $0 $DESKTOP
SetShellVarContext all
StrCpy $1 $DESKTOP
MessageBox MB_OK $0$\n$1

4.9.7.8 Sleep

sleeptime_in_ms

sleeptime_in_ms ミリ秒の間 インストーラーの実行を 中断します。 sleeptime_in_ms は、変数 例えば "$0" 、あるいは 数字 すなわち "666" である事ができます。

DetailPrint "sleeping..."
Sleep 3000
DetailPrint "back to work"

4.9.8 文字列操作 命令

4.9.8.1 StrCpy

user_var(対象) str [maxlen] [start_offset]

ユーザー変数 $x に str を設定します。str は、他の変数や設定されているユーザー変数を含む事ができる事に注意して下さい(文字列をこの方法で連結することなどが可能です)。もし maxlen が指定されると、文字列は最大で maxlen 文字であるでしょう(もし maxlen が負なら、文字列は、終わりから abs(maxlen) 文字切りつめられます)。もし start_offset が指定されると、ソースはそれによるオフセットです(もし start_offset が負なら、それは文字列の終わりから abs(start_offset) 文字を始めます)。(訳注: abs() 関数の結果は、マイナスを取った大きさになります。)

StrCpy $0 "a string" # = "a string"
StrCpy $0 "a string" 3 # = "a s"
StrCpy $0 "a string" -1 # = "a strin"
StrCpy $0 "a string" "" 2 # = "string"
StrCpy $0 "a string" "" -3 # = "ing"
StrCpy $0 "a string" 3 -4 # = "rin"

4.9.8.2 StrLen

user_var(長さを出力) str

ユーザー変数 $x に str の長さを設定します。

StrLen $0 "123456" # = 6

4.9.9 スタック サポート

4.9.9.1 Exch

[user_var | stack_index]

パラメータが指定されない時には、スタックの一番上 2つの要素を交換します。 パラメータが指定されてユーザー変数である時には、スタックの一番上の要素をパラメータと交換します。 パラメータが指定されて正の整数である時には Exchは、スタックの一番上のアイテムを、パラメータでスタックの一番上からのオフセットによって指定されたアイテムと 交換します。 もしスタックに交換を完了するのに十分なアイテムがなければ、(コードをデバッグするのを助けるために:)致命的エラーが発生します。

Push 1
Push 2
Exch
Pop $0 # = 1
Push 1
Push 2
Push 3
Exch 2
Pop $0 # = 1
StrCpy $0 1
Push 2
Exch $0 # = 2
Pop $1 # = 1

4.9.9.2 Pop

user_var(出力)

スタックの文字列をユーザー変数 $x に Pop します(意訳:ポンと出します)。もしスタックが空なら、エラーフラグがセットされます。

Push 1
Pop $1 # = 1

4.9.9.3 Push

string

文字列をスタック上に Push します(意訳:押し込みます)。文字列はその次に スタックからポンと出される事ができます。

Push "a string"

4.9.10 整数 サポート

4.9.10.1 IntFmt

user_var(出力) format numberstring

"format" の書式を使って "numberstring" 中の数を書式設定し、出力を ユーザー変数 $x にセットします。例の書式文字列は "%08X" "%c" を 含んでいます。

IntFmt $0 "0x%08X" 195948557
IntFmt $0 "%c" 0x41

4.9.10.2 IntOp

user_var(出力) value1 OP [value2]

value1 と(OP 次第で)value2 を指定したユーザー変数(user_var)に計算します。 OP は以下のうちの1つに定義されています:

IntOp $0 1 + 1
IntOp $0 $0 + 1
IntOp $0 $0 << 2
IntOp $0 $0 ~
IntOp $0 $0 & 0xF

4.9.11 リブート 命令

4.9.11.1 Reboot

コンピューターを再起動します。こいつに気を付けて下さい。もし失敗すると、 .onRebootFailed が呼ばれます。どうあろうとも、 この命令はちょうど Quit のように 決してリターンしません。

MessageBox MB_YESNO|MB_ICONQUESTION "Do you wish to reboot the system?" IDNO +2
  Reboot

4.9.11.2 SetRebootFlag

true|false

リブート フラグを true か false のどちらかにセットします。フラグの値は IfRebootFlag を使って読む事ができます。

SetRebootFlag true
IfRebootFlag 0 +2
  MessageBox MB_OK "this message box will always show"

4.9.12 インストール ログ記録 命令

4.9.12.1 LogSet

on|off

$INSTDIR\install.log にインストール ログ記録が生じるかどうかを セットします。$INSTDIR は この関数を呼ぶ前に値を持っていなければならず、さもないと働きません。(デフォルトではない) これをサポートするには コンパイル時に NSIS_CONFIG_LOG ビルド設定がセットされて いなければなりません(scons NSIS_CONFIG_LOG=yes)。NSIS の再コンパイルについての 詳細に関しては、 Building NSIS を見て下さい。

4.9.12.2 LogText

text

もしインストーラー ログ記録が有効にされていると、ログ ファイルに "text" テキストを 挿入します。

IfFileExists $WINDIR\notepad.exe 0 +2
  LogText "$$WINDIR\notepad.exe exists"

4.9.13 セクション管理

4.9.13.1 SectionSetFlags

section_index section_flags

セクションのフラグをセットします。フラグは 32 ビット整数です。最初の(一番低い)ビットは セクションが現在選択されているかどうかを表して、2 番目のビットは セクションがセクション グループであるかどうかを表して(あなたが何をしているか本当に分からない限りこれを変更しない で下さい)、3 番目のビットは セクションがセクション グループ エンドであるかどうかを表して (もう一度、変更しないで)、4 番目のビットは セクションが太字で表示されるかどうかを表して、 5 番目のビットは セクションが読み取り専用かどうかを表して、6 番目のビットは セクション グループが自動的に展開されるべきかどうかを表して、7 番目のビットは 部分的に選択されている セクション グループの為にセットされて、8 番目のビットは 部分的に選択されているセクション グループのトグルの為に内部で使用されていて、9 番目のビットは セクション名の変更を反映させる 為に使われています。もし範囲外のセクションが指定されると、エラー フラグがセットされます。

それぞれのフラグが `SF_` のプリフィックスを持つ名前を持っています:

!define SF_SELECTED   1
!define SF_SECGRP     2
!define SF_SECGRPEND  4
!define SF_BOLD       8
!define SF_RO         16
!define SF_EXPAND     32
!define SF_PSELECTED  64

使用例に関しては one-section.nsi 例を見て下さい。

もっと役立つマクロと定義に関しては、Include\Sections.nsh を見て下さい。

Section test test_section_id
SectionEnd

Function .onInit
  # section 'test' を 選択されていて読み取り専用に セットする
  IntOp $0 ${SF_SELECTED} | ${SF_RO}
  SectionSetFlags ${test_section_id} $0
FunctionEnd

4.9.13.2 SectionGetFlags

section_index user_var(出力)

セクションのフラグを取得します。フラグの説明に関しては上を見て下さい。 もし範囲外のセクションが指定されると、エラー フラグがセットされます。

Section test test_section_id
SectionEnd

Function .onSelChange
  # 'test' セクションが選択された状態を維持する
  SectionGetFlags ${test_section_id} $0
  IntOp $0 $0 | ${SF_SELECTED}
  SectionSetFlags ${test_section_id} $0
FunctionEnd

4.9.13.3 SectionSetText

section_index section_text

セクションの為の説明を section_index にセットします。 もしテキストが "" にセットされると、セクションは隠されます。 もし範囲外のセクションが指定されると、エラー フラグがセットされます。

Section "" test_section_id
SectionEnd

Function .onInit
  # セクションの名前を $WINDIR に変える
  SectionSetText ${test_section_id} $WINDIR
FunctionEnd

4.9.13.4 SectionGetText

section_index user_var(出力)

section_index セクションの説明テキストを出力に保存します。 もしセクションが隠されていると、空の文字列を保存します。 もし範囲外のセクションが指定されると、エラー フラグがセットされます。

Section test test_section_id
SectionEnd

Function .onInit
  # $WINDIR をセクションの名前に追加する
  SectionGetText ${test_section_id} $0
  StrCpy $0 "$0 - $WINDIR"
  SectionSetText ${test_section_id} $0
FunctionEnd

4.9.13.5 SectionSetInstTypes

section_index inst_types

section_index により指定される デフォルトで有効な状態にされているセクションに インストール タイプをセットします。セクション インデックスはゼロで始まることに注意して下さい。 inst_types のすべてのビットが、セクションがそのインストール タイプであるかどうかを知らせるフラグです。 例えば もし 3 つのインストール タイプを持っていて 最初のセクションがインストール タイプ 1 と 3 に 含まれていて欲しいなら、コマンドはこの様になるはずです:

SectionSetInstTypes 0 5

5 のバイナリー値が "00000101" だからです。 もし指定されたセクション インデックスが範囲外なら、エラー フラグがセットされます。

Section test test_section_id
SectionEnd

Function .onInit
  # 'test' セクションをインストール タイプ 3 と 4 に結びつける
  SectionSetInstTypes ${test_section_id} 12
FunctionEnd

4.9.13.6 SectionGetInstTypes

section_index user_var(出力)

セクションのインストール タイプ フラグ配列を取得します。 出力をどのように処理するかの説明に関して SectionSetInstTypes についての上の説明を見て下さい。 もし指定されたセクション インデックスが範囲外なら、エラー フラグがセットされます。

Section test test_section_id
SectionEnd

Function .onInit
  # 'test' セクションを 既存のタイプの一番上であるインストール タイプ 5 に結びつける
  SectionGetInstTypes ${test_section_id} $0
  IntOp $0 $0 | 16
  SectionSetInstTypes ${test_section_id} $0
FunctionEnd

4.9.13.7 SectionSetSize

section_index new_size

section_index により指定されるセクションのサイズをセットします。 インデックスはゼロで始まることに注意して下さい。 サイズの値は キロバイトで入力されなければならず、数字だけをサポートしています。

Section test test_section_id
SectionEnd

Function .onInit
  # 'test' セクションの必要なサイズを 100 キロバイトにセットする
  SectionSetSize ${test_section_id} 100
FunctionEnd

4.9.13.8 SectionGetSize

section_index user_var

section_index により指定されるセクションのサイズを得て、与えられたユーザー変数に値を保存します。 インデックスはゼロで始まることに注意して下さい。

Section test test_section_id
SectionEnd

Function .onInit
  # 'test' セクションの必要なサイズを 100 キロバイト増やす
  SectionGetSize ${test_section_id} $0
  IntOp $0 $0 + 100
  SectionSetSize ${test_section_id} $0
FunctionEnd

4.9.13.9 SetCurInstType

inst_type_idx

現在の InstType をセットします。inst_type_idx は 0 から 31 の間でなければなりません。 もし範囲外の InstType が使用されても エラーフラグはセットされません

4.9.13.10 GetCurInstType

user_var

現在の InstType を得て user_var に保存します。 もし最初のインストール タイプが選択されると、user_var に 0 が置かれます。 もし 2 番目のインストール タイプが選択されると、user_var に 1 が置かれる、・・・などです。 ${NSIS_MAX_INST_TYPES} の値(デフォルトで 32)は、カスタム インストール タイプが選択された事を 意味しています。

4.9.13.11 InstTypeSetText

inst_type_idx text

指定された InstType のテキストをセットします。 もしテキストが空なら、InstType は削除されます。 前に使っていない inst_type_idx 番号を使用する事によって、新しい InstTypes を作成できます。 この新しい InstType にセクションを 追加/削除するには、SectionSetInstTypes を見て下さい。 SectionIn と違って インデックスはゼロを基にしていて、最初のインストール タイプのインデックスが 0 になります。

InstType a
InstType b

Function .onInit
  # 最初のインストール タイプの名前を $WINDIR にセットする
  InstTypeSetText 0 $WINDIR
  # 2 番目のインストール タイプの名前を $TEMP にセットする
  InstTypeSetText 1 $TEMP
FunctionEnd

4.9.13.12 InstTypeGetText

inst_type_idx user_var

指定された InstType のテキストを得ます。

InstType a
InstType b

Function .onInit
  InstTypeGetText 0 $0
  DetailPrint $0 # 'a' をプリントする
  InstTypeGetText 1 $0
  DetailPrint $0 # 'b' をプリントする
FunctionEnd

4.9.14 ユーザーインターフェース 命令

4.9.14.1 BringToFront

インストーラー ウィンドウを目に見えるようにして、ウィンドウ リストのトップにそれを持って来ます。 アプリケーションが インストーラーの前面に自身を表示するように実行されていると、BringToFront は インストーラーをフォーカスの後ろに持っていきます。

Windows の最近のバージョンは、フォアグラウンド ウィンドウの設定を 制限しています。 インストールの間 ユーザーが別のアプリケーションで作業していると、ユーザーは違った方法を使って 通知されるかもしれません。

4.9.14.2 CreateFont

user_var(ハンドル出力) face_name [height] [weight] [/ITALIC] [/UNDERLINE] [/STRIKE]

フォントを作成して、user_var 中にハンドルを入れます。 異なるパラメーターについての詳しい情報に関しては、 Win32 API関数 CreateFont() についての MSDN のページを見てください。

^Font と ^FontSize LangStringを使って NSIS で使用されている現在のフォントを得る事ができます。

!include WinMessages.nsh
GetDlgItem $0 $HWNDPARENT 1
CreateFont $1 "Times New Roman" "7" "700" /UNDERLINE
SendMessage $0 ${WM_SETFONT} $1 1

4.9.14.3 DetailPrint

user_message

"user_message" 文字列を インストーラーの詳細ビューに追加します。

DetailPrint "this message will show on the installation window"

4.9.14.4 EnableWindow

hwnd (1|0)

指定されたウィンドウやコントロールへの マウスとキーボード入力を 有効か無効にします。 可能な状態は、0 (無効)か1 (有効)です。

GetDlgItem $0 $HWNDPARENT 1
EnableWindow $0 0
Sleep 1000
EnableWindow $0 1

4.9.14.5 FindWindow

user_var(hwnd 出力) windowclass [windowtitle] [windowparent] [childafter]

ウィンドウを捜します。 win32 FindWindowEx() のように振る舞います。 windowclass (and/or 指定されれば windowtitle) によって 捜します。 windowparent か childafter が指定されていると、サーチはその様に制限されます。 windowclass や windowtitle が "" と指定されると、それらはサーチに使用されません。 ウィンドウが見つからないと、返されるユーザ変数は 0 です。 古いスタイルの FindWindow の動作を行うには、SendMessage と共に FindWindow を使用してください。

FindWindow $0 "#32770" "" $HWNDPARENT
FindWindow $0 "my window class" "my window title"

4.9.14.6 GetDlgItem

user_var(出力) dialog item_id

指定されたダイアログボックス中の item_id で特定された コントロールのハンドルを 取得します。 内部ダイアログ上のコントロールのハンドルを得たいなら、内部ダイアログのハンドルを得るのに 最初に FindWindow user_var(出力) "#32770" "" $HWNDPARENT を使って下さい。

GetDlgItem $0 $HWNDPARENT 1 # 次へ/インストール ボタン

4.9.14.7 HideWindow

インストーラーを隠します。

4.9.14.8 IsWindow

HWND jump_if_window [jump_if_not_window]

もし HWND がウィンドウなら jump_if_window へ行き、(もし指定されれば)さもなければ jump_if_not_window に行きます。

GetDlgItem $0 $HWNDPARENT 1
IsWindow $0 0 +3
  MessageBox MB_OK "found a window"
  Goto +2
  MessageBox MB_OK "no window"

4.9.14.9 LockWindow

on|off

LockWindow on は、メインウィンドウが 変更によって再描画されるのを 防ぎます。 LockWindow off が使用された時、LockWindow on の為に再描画されなかったすべてのコントロールが 再描画されます。 今 一度に1つのコントロールではなくて コントロールのグループが同時にちらつくので、これは ページのちらつきをより良くします。 古いコンピュータでは 個々のコントロールのちらつきが、より目立ちます。

4.9.14.10 SendMessage

HWND msg wparam lparam [user_var(戻り値)] [/TIMEOUT=time_in_ms]

メッセージを HWND に送ります。 もしユーザー変数 $x が最後のパラメーター(/TIMEOUT を使うなら最後の1つ前)として指定されると、SendMessage の戻り値はそれに格納されます。 'msg' を指定している時、ただメッセージの整数値を使用しなければならない事に 注意して下さい。 もし文字列を送りたいなら、必要なところで wParam か lParam として "STR:文字列" を使って下さい。

スクリプト中で すべての Windows メッセージを定義済みにするには、WinMessages.nsh をインクルードして下さい。

文字列パラメーターを送るには、パラメーターの前に STR: を置き、例えば "STR:ある文字列" として下さい。

タイムアウト時間の、ミリ秒での、持続時間を指定するには /TIMEOUT=time_in_ms を使って下さい。

!include WinMessages.nsh
FindWindow $0 "Winamp v1.x"
SendMessage $0 ${WM_CLOSE} 0 0

4.9.14.11 SetAutoClose

true|false

(AutoCloseWindow を使ってインストーラーの為に指定され、アンインストーラーにおいては false の)デフォルトの自動ウィンドウ-クローズ フラグをオーバーライドします。 インストール ウィンドウをインストールの完了後にすぐに消すには 'true' 、あるいは 手動クローズを要求させるには 'false' を指定して下さい。

4.9.14.12 SetBrandingImage

[/IMGID=item_id_in_dialog] [/RESIZETOFIT] path_to_bitmap_file.bmp

商標イメージ画像として表示される 現在のビットマップ・ファイルをセットします。 IMGID が全く指定されないと、見つかった最初のイメージ コントロールが使用されるか、AddBrandingImage によって作成されたイメージ コントロールになります。 このビットマップがユーザーのマシンに存在していなければならない事に 注意して下さい。 画像をそこに置くには 最初に File を使用して下さい。 /RESIZETOFIT が指定されると、画像は自動的にイメージ コントロール サイズに(非常に不完全に)リサイズされます。 もし AddBrandingImage を使うと、スクリプトをコンパイルして AddBrandingImage の出力を見る事によって それがサイズを教え、 このサイズが得られます。 .onInit から呼ばれた時には SetBrandingImage は働きません!

4.9.14.13 SetDetailsView

show|hide

あなたがどちらのパラメーターを渡すかによって、詳細を表示するか 隠します。 ShowInstDetails を通してセットされる、デフォルト詳細ビューをオーバーライドします。

4.9.14.14 SetDetailsPrint

none|listonly|textonly|both|lastused

モードを それらの状態を表示するコマンドに セットします。 none はコマンドをサイレントにして、listonly は状態テキストをリストボックスだけに追加し、textonly は状態テキストをステータスバーだけに表示させ、both (デフォルト) は両方を有効にします。 たくさんの小さなファイルを展開するためには、(特に スムーズ スクロールが有効にされている win9x で) textonly がお勧めです。

SetDetailsPrint none
File "secret file.dat"
SetDetailsPrint both

4.9.14.15 SetCtlColors

hwnd [/BRANDING] [text_color] [transparent|bg_color]

スタティック・コントロール、エディット・コントロール、ボタン、ダイアログに 背景色とテキスト色を 設定します。 text_colorbg_color は変数を受け付けません。 コントロールのハンドル (HWND) を得るには GetDlgItem を使用して下さい。 コントロールを透明にするには、背景色の値として "transparent" を指定して下さい。 また、コントロールを完全にグレー(または あなたが選ぶいかなる他の色)にするのに テキスト色と背景色のあるなしにかかわらず /BRANDING を指定できます。 これはMUIでの商標イメージ テキストコントロールで使用されます。

FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 1006
SetCtlColors $0 0xFF0000 0x00FF00

警告XPStlye on を使っている時、チェック・ボックスの背景色を "transparent" に設定するのが 適切に機能しないかもしれません。 ある Windows テーマを使用している時、背景が 透明の代わりに完全に黒いかもしれません。

4.9.14.16 SetSilent

silent | normal

インストーラーを サイレント モードか通常モードにセットします。 サイレント インストールについての詳細は SilentInstall を 見て下さい。.onInit でだけ 使用できます。

4.9.14.17 ShowWindow

hwnd show_state

ウィンドウの可視性を セットします。 可能な show_states は Windows ShowWindow 関数と同じです。 SW_* 定数は <NSIS インストール先>\Include\WinMessages.nsh で定義されています。

!include WinMessages.nsh
GetDlgItem $0 $HWNDPARENT 1
ShowWindow $0 ${SW_HIDE}
Sleep 1000
ShowWindow $0 ${SW_SHOW}

4.9.15 多言語 命令

4.9.15.1 LoadLanguageFile

language_file.nlf

言語テーブルの構築の為に言語ファイルをロードします。NSIS と共に配布されている全ての言語 ファイルが、<インストール先\>Contrib\Language Files 中にあります。

言語ファイルを挿入し終わった後、${LANG_langfile} は言語 id に定義されます(例えば、${LANG_ENGLISH} は 1033 に定義されます)。LangString LicenseLangString、LangDLL、VIAddVersionKey と共に 使って下さい。

4.9.15.2 LangString

name language_id string

多言語で書かれた文字列を定義します。これは、その値がどの言語もみな違っている(か、そうで ないか、あなた次第である)事を意味しています。スクリプトに大量のスイッチを追加する必要無しに インストーラーを容易に多言語にする事を可能にします。

それぞれの言語文字列は、それを識別する名前と インストーラーによって使用される各言語の値を 持っています。それらはスクリプト中のどの実行時文字列でも使う事ができます。言語文字列を 使うには、LangString を使いたい文字列に $(LangString_name) を追加するだけです。

注:

使用例:

 LangString message ${LANG_ENGLISH} "English message"
 LangString message ${LANG_FRENCH} "French message"
 LangString message ${LANG_KOREAN} "Korean message"

 MessageBox MB_OK "A translated message: $(message)"

4.9.15.3 LicenseLangString

name language_id license_path

text/RTF ファイルから文字列をロードして LicenseData だけで使用され得る特別な LangString を定義するだけで、 LangString と同じ事をやります。

LicenseLangString license ${LANG_ENGLISH} license-english.txt
LicenseLangString license ${LANG_FRENCH} license-french.txt
LicenseLangString license ${LANG_GERMAN} license-german.txt
LicenseData $(license)

4.10 多言語

バージョン2現在で NSIS は多言語を完全にサポートしています。1つのインストーラのインター フェースが 多言語をサポートできます。

各言語の為にデフォルト インターフェーステキストと言語プロパティをロードするには LoadLanguageFile を使って下さい。

デフォルト インターフェーステキストは、 ComponentText などのような命令を使って容易に変更 できます。

あなた自身の文字列中に標準言語文字列の内容を使う事もできます(例えば、$(^Name) は Name 命令を使ってセットされたインストーラの名前が 入っています)。すべての標準言語文字列の名前は、言語ファイル中の文字列のすぐ上にコメント として記載されています。言語ファイルは <インストール先\>Contrib\Language Files にあります。

あなた自身の言語文字列を作成するには、 LangString を使って下さい。

多言語を持つインストーラの例に関しては、 languages.nsi を見て下さい。

4.10.1 言語選択

インストーラが動作を開始する時、インターフェース言語を選択するのにこれらのステップを 通ります:

  1. ユーザーのデフォルト Windows UI 言語を得る
  2. 言語の完全一致を見つける
  3. もし完全一致がなければ、主な言語一致を見つける
  4. もし一致がなければ、スクリプト中で定義された最初の言語を使う(最初の言語が英語のような 一般的なものである事を確実にして下さい)
  5. もし言語変数 $LANGUAGE が .onInit の間に変更されて しまっていると、NSIS はもう一度ステップ2から4を通ります

4.10.2 LangDLL プラグイン

LangDLL プラグインは、ユーザーにインストーラーの言語を選択するオプションを与える事を 可能にします。インストーラー中のすべての言語の言語id (${LANG_langfile}) とその名前をただ pushし、それで、pushされた言語の番号、キャプション、ユーザーに言語を選択する事を教える テキストが LangDialog と呼ばれるプラグイン関数を呼び、$LANGUAGE に返された値をpopして、 次に行けるようになります。もしユーザーがキャンセルボタンをクリックすると、戻り値は "cancel" になります。

使用例に関しては、 languages.nsi を見て下さい。

4.10.3 RTL 言語

RTL 言語は、右から左へ書かれる言語(例えば、アラビア語とヘブライ語)です。NSIS は RTL 言語を完全にサポートしています。言語ファイル中に 言語が RTL であるかそうでないかを指定する 場所があります。実行時に現在の言語が RTL であるかどうかを見つけ出すには、$(^RTL) 言語文字列 の値を確認して下さい。言語が RTL なら 1 、そうでないなら 0 です。ダイアログを作成する プラグインは普通 RTL 設定も持っていて、それらを使っている時に これが役に立つ事ができます。

4.11 プラグイン DLL

NSIS スクリプティング言語の能力は、DLL ファイル中に提供される機能性を利用する事によって 拡張され得ます。おそらく これの最もよく知られた例は、すべての NSIS リリースにバンドルされている InstallOptions.dll です。

NSIS コンパイラーは開始する時に、DLL の為のプラグイン ディレクトリーをスキャンして 見つかったプラグインとそのエクスポートされた関数のリストを作ります。 コンパイルの間 もし コンパイラーが言語キーワードを見つけると思っている所で 例えば fred::flintstone などのシーケンスに出くわすと、コンパイラーはこのリストをくまなく捜します。 もしリスト エントリーが fred.dll が flintstone 関数をエクスポートしていると 具体的に述べていると、 NSIS は fred.dll ファイルを 作成されるインストーラー バイナリー中にパックします。

プラグイン コマンドの実行の間、NSIS は必要な DLL をテンポラリーフォルダー ($PLUGINSDIR) に アンパックして、指定されたすべての引数を(右から左の順で)プッシュし、そのあとで DLL 関数を 実行します。

4.11.1 プラグイン コマンドの使用

プラグイン呼び出しはこの様になります:

InstallOptions::dialog "ini_file_location.ini"

すべてのパラメーターがスタック上にプッシュされます(このケースでは プラグイン関数は1つのパラメーターだけを必要としています)。 いくつかのプラグイン コマンドは スタック上にいかなるパラメーターも必要としないかもしれませんし、 他の物は それらをより多く必要とするかもしれません。 プラグイン コマンドを使うには、関数がどんなパラメーターを必要とするかを知る為に プラグインの為のドキュメンテーションを読む必要があるでしょう。

4.11.2 手動でのプラグイン呼び出し

もしユーザーのハードドライブやどこかほかの場所に保存されているプラグインを呼びたいなら、 CallInstDLL を使って下さい。 ほとんどすべてのプラグインが インストーラーの機能性を提供しているので、プラグイン コマンドを使う事が より容易にします。 あるバージョンのあなたのアプリケーションにリンクされて インストールフォルダーにコピーされているべきである プラグインを作成した時に、CallInstDLL を使う事が助けになり得ます。

4.12 サイレント インストーラー/アンインストーラー

サイレント インストーラーは、ユーザーの介在をまったく必要としないインターフェースを持たない インストーラーです。ユーザーはどんなダイアログも見ず、どんな質問もされません。これは、 ユーザーの介在無しに何かをインストールやアンインストールしたいネットワーク管理者にとって 役に立つので、かなり多くのコンピューター上で素早く操作を行う事ができます。また、 2つのインストーラーを表示する代わりに インストーラー中に別のものを埋め込み、必要なすべての 情報を集めたい 他の製作者にとっても、役に立ちます。

NSIS インストーラーとアンインストーラーは、サイレントでもサイレントで無くも在り得ます。 インストーラーやアンインストーラーがサイレントである時、すべてのコールバック関数が呼ばれる 訳ではありません。.onGUIInit .onGUIEnd、そのアンインストーラーで同等のもの、特定のページやページタイプに関連した どのコールバックも 呼ばれません。

インストーラーやアンインストーラーをサイレントにするにはいくつかの方法があります:

  1. SilentInstallSilentUninstall
  2. SetSilent
  3. コマンドライン上で /S を渡す(大文字小文字を区別する)

インストーラー/アンインストーラーがサイレントであるかどうかをチェックするには、 IfSilent を使って下さい。

必要な時にインストーラーがサイレントである事を確実にするには、ユーザーの介在やウィンドウの 作成を必要とするそれぞれのコマンドの前に IfSilent で チェックすべきです。サイレント インストーラーで最も一般的に知られる犯人である MessageBox コマンドは、サイレント インストーラーの為の デフォルト応答をセットするのに /SD スイッチを持っています。もしインストーラー/アン インストーラーを完全にサイレントである事ができるようにしたいなら、このスイッチを使うべき です。NSIS のすべての内部メッセージボックスは、サイレント インストールの為のデフォルトを 持っています。 silent.nsi example がこのトピックのすべての面をデモンストレーションしています。

ディレクトリー ページはサイレント インストーラーで表示され得ないので、ユーザーはコマンド ラインでインストール ディレクトリーを指定するオプションを持っています(これは非サイレント インストーラー/アンインストーラーでも働きます)。そうするには、ユーザーは以下の例のように /D スイッチを使用します:

foo.exe /S /D=C:\Program Files\Foo

もしインストーラー/アンインストーラーが サイレントの時に集める事ができない情報を さらに いくらか必要とするなら、コマンドラインでその情報を指定し .onInit 中でそれを処理する事を ユーザーに許可する事ができます。 GetOptions を使う事ができます。

!include FileFunc.nsh
!insertmacro GetParameters
!insertmacro GetOptions

Function .onInit
  ${GetParameters} $R0
  ClearErrors
  ${GetOptions} $R0 /USERNAME= $0
FunctionEnd

上の例は、ユーザーが /USERNAME= の後に渡した値を $0 にコピーします。これは、対話式の ユーザーインターフェースを使う代わりにコマンドラインで必要な情報を指定する事を ユーザーに 許可します。ユーザーは以下を使えます:

foo.exe /S /USERNAME=Bar /D=C:\Program Files\Foo

あるいは:

foo.exe /S /USERNAME=string with spaces /D=C:\Program Files\Foo

あるいは:

foo.exe /S /USERNAME="string with spaces" /D=C:\Program Files\Foo

もしインストーラー/アンインストーラーがたくさんの情報を必要とし、それがサイレントである 事ができるようにしたいなら、パス上で応答ファイルにパスする事をユーザーに許可するべきです。 これは、すべての情報をコマンドラインで書くよりもずっと快適でしょう。

 

Previous | Contents | Next