フリーソフト

« 3. Command Line Usage - NSIS Users Manual | トップページ | 5. Compile Time Command - NSIS Users Manual »

4. Scripting Reference - NSIS Users Manual

これはNSIS Users Manualの非公式な日本語ドキュメントです。本コンテンツの利用によって生じたいかなる損害も、著者は一切の責任をとることができませんので、自己責任での利用をお願いします。読みやすさを重視するため必ずしも原文に忠実でない部分があります。また、誤りが含まれている可能性もあります。必ず原文をご確認ください。 訳者:Kawai

前へ | 目次 | 次へ

第4章: スクリプトリファレンス

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

[原文]

NSIS スクリプトファイル(.nsi)は、スクリプトコードが記述された通常のテキストファイルです。

コマンド

コマンド行の形式は、 'command [parameters]' です。

File "myfile"

コメント

; あるいは # から行末まではコメントとして扱われます。コマンドの後ろにコメントを置くことも可能です。また、C言語スタイルの、一行あるいは複数行のコメントを利用することもできます。

; コメント
# コメント

# コメント \
    ここもコメント行 (後述の 長いコマンド を参照)

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

Name /* コメント */ mysetup

File "myfile" ; コメント

; あるいは # から始まる引数を利用したい場合は、それらをクォートの中に入れます。

プラグイン

プラグインの呼び出しは、 'plugin::command [parameters]' の形式です。詳細については、 プラグイン DLL を参照してください。

nsExec::Exec "myfile"

数値

数値として扱いたいパラメータには、10進数、16進数(0x を先頭に付ける、例: 0x12345AB)、8進数(0 を先頭に付ける、x は不要)を使用します。

色は、HTMLのように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 \
    "Do you want to remove all files in the folder? \
    (If you have anything you created that you want \
     to keep, click No)" \
    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 はアンインストーラが存在しているディレクトリ名を保持している点に注意してください。その値は、インストーラにおける $INSTDIR と同じとは限りません。例えば、 $WINDIR にアンインストーラを出力し、ユーザもそれを移動していない場合、アンインストーラにおける $INSTDIR の値は $WINDIR となります。他の場所にアンインストーラを書き込む場合は、インストーラにおける $INSTDIR をレジストリなどに保持しておき、アンインストーラからはそれを読み出すようにすべきです。

$OUTDIR

現在の出力ディレクトリ。SetOutPath で暗黙的に設定したり、 StrCpyReadRegStrReadINIStr などで明示的に設定したりします。

$CMDLINE

インストーラのコマンドライン。コマンドラインの形式は、以下のいずれかです。

  • "full\path to\installer.exe" PARAMETER PARAMETER PARAMETER
  • installer.exe PARAMETER PARAMETER PARAMETER
  • PARAMETER の部分の解析については、 GetParameters を参照してください。コマンドラインで /D= を指定してインストールディレクトリを上書きした場合(3.2.1 参照)、それは $CMDLINE には現れません。

$LANGUAGE

現在、使用されている言語の識別子。例えば、英語は1033です。.onInit でこの値を変更することも可能です。

4.2.3 定数

定数は、 InstallDir 属性においても使用することができます。

いくつかの新しい定数は、すべての OS での動作が保障されていないことに注意してください。例えば、 $CDBURN_AREA は Windows XP かそれ以降でしか動作しません。Windows 98 で利用した場合、その値は空になります。特に説明がない定数については、すべての OS で利用することが可能です。

$PROGRAMFILES, $PROGRAMFILES32, $PROGRAMFILES64

プログラムファイルのディレクトリ。実行時に検出されますが、通常は C:\Program Filesです。Windows x64では、 $PROGRAMFILES64 は C:\Program Files を示しますが、$PROGRAMFILES と $PROGRAMFILES32 は C:\Program Files (x86) を示します。 x64 アプリケーションをインストールする場合は、 $PROGRAMFILES64 を使用してください。

$COMMONFILES, $COMMONFILES32, $COMMONFILES64

共有ファイルのディレクトリ。このディレクトリには、アプリケーション間で共有するコンポーネントを保存します。実行時に検出されますが、通常は C:\Program Files\Common Files です。Windows x64では、 $COMMONFILES64 は C:\Program Files\Common Files を示しますが、$COMMONFILES と $COMMONFILES32 は C:\Program Files (x86)\Common Files を示します。 x64 アプリケーションをインストールする場合は、 $COMMONFILES64 を使用してください。

$DESKTOP

Windows デスクトップのディレクトリ。実行時に検出されますが、通常は C:\Windows\Desktop です。この定数の内容(すべてのユーザ、あるいはカレントユーザ)は、SetShellVarContext の設定に依存します。デフォルトはカレントユーザです。

$EXEDIR

インストーラの実行ファイルがあるディレクトリ。この値を変更することは技術的には可能ですが、よい考えではありません。

$EXEFILE

インストーラの実行ファイルのベース名(パスを取り除いたファイル名)。

$EXEPATH

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

${NSISDIR}

NSIS がインストールされているパスを保持しています。NSIS ディレクトリにあるリソース(例: アイコン、ユーザインターフェースなど)を呼び出す場合に有用です。

makensis とデータを同じ場所に保持するようにコンパイルされた場合は(Windows でデフォルト)、makensis と同じディレクトリになります。他のプラットホームでは、コンパイル時に設定されます(INSTALL ファイルを参照)。いずれの場合においても、NSISDIR 環境変数を設定することによって、実行時に値を変更することが可能です。詳細については、 3.1.3 を参照してください。

$WINDIR

Windows ディレクトリ。実行時に検出されますが、通常は C:\Windows もしくは C:\WinNT です。

$SYSDIR

Windows システムディレクトリ。実行時に検出されますが、通常は C:\Windows\System あるいは C:\WinNT\System32 です。

$TEMP

システム一時ディレクトリ。実行時に検出されますが、通常は C:\Windows\Temp です。

$STARTMENU

スタートメニューのフォルダ。CreateShortCut を使用してスタートメニューに項目を追加する際に有用です。この定数の内容(すべてのユーザ、あるいはカレントユーザ)は、SetShellVarContext の設定に依存します。デフォルトはカレントユーザです。

$SMPROGRAMS

スタートメニューのプログラムフォルダ。$STARTMENU\プログラム が必要な場合に使用してください。この定数の内容(すべてのユーザ、あるいはカレントユーザ)は、SetShellVarContext の設定に依存します。デフォルトはカレントユーザです。

$SMSTARTUP

スタートメニュー プログラムのスタートアップフォルダ。この定数の内容(すべてのユーザ、あるいはカレントユーザ)は、SetShellVarContext の設定に依存します。デフォルトはカレントユーザです。

$QUICKLAUNCH

クイック起動フォルダ(IE 4のアクティブデスクトップとそれ以降)。クイック起動が利用できない場合は、$TEMP と同じ値を返します。

$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

「ネットワーク プレース」や「近くのコンピュータ」フォルダにあるリンクオブジェクトが保存されているディレクトリ。

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

$FONTS

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

$TEMPLATES

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

$APPDATA

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

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

$LOCALAPPDATA

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

この定数は、Windows 2000 とそれ以降で利用できます。

$PRINTHOOD

プリンタフォルダに存在するリンクオブジェクトが保存されているディレクトリ。

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

$INTERNET_CACHE

Internet Explorer の一時インターネットファイルのディレクトリ。

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

$COOKIES

Internet Explorer のクッキー ディレクトリ。

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

$HISTORY

Internet Explorer の履歴ディレクトリ。

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

$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\1033 です。

この定数は、Windows XP とそれ以降で利用できます。

$CDBURN_AREA

CD への書き込み待ちのファイルが保存されているディレクトリ。

この定数は、Windows XP とそれ以降で利用できます。

$HWNDPARENT

親ウインドウの HWND (10進数)。

$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 はひとつ命令を飛ばして、現在の命令から2つ目の命令に移動します。-2 は2つ前の命令へ、+10 は9つの命令をスキップし、現在の位置から10番目の命令へジャンプします。

インストーラが実行中の場合、実行時に実行されているすべてのコマンドが「命令」となります。MessageBoxGotoGetDLLVersionFileReadSetShellVarContext は、すべて命令です。AddSizeSectionSectionGroupSectionEndSetOverwrite (および Compiler Flags のすべて)、NameSetFontLangString はコンパイル時に実行されるため、命令ではありません。

例:

 Goto +2
   MessageBox MB_OK "You will never ever see this message box"
 MessageBox MB_OK "The last message was skipped, this one should be shown"
 Goto +4
 MessageBox MB_OK "The following message will be skipped"
 Goto +3
 MessageBox MB_OK "You will never ever see this message box"
 Goto -3
 MessageBox MB_OK "Done"

相対ジャンプでは、マクロの挿入 は、ひとつの命令として扱われないという点に注意してください。マクロは、相対ジャンプが適用されるより前に展開されますので、相対ジャンプは、挿入されたマクロ内のコードにジャンプする可能性があります。例えば、以下のコードでは、マクロはスキップされず、メッセージボックスが表示されます。

!macro relative_jump_test
  MessageBox MB_OK "first macro line"
  MessageBox MB_OK "second macro line"
!macroend

Goto +2
!insertmacro relative_jump_test

4.5 ページ

[原文]

それぞれの NSIS インストーラは、ページのセットを保持しています(自動実行インストーラを除く)。各ページは、ユーザ関数(例えば、nsDialogsInstallOptions)によって生成された、NSIS のビルトインページ、あるいはカスタムページです。

スクリプトを利用するとページの順序や見栄え、挙動をコントロールすることができます。ページをスキップしたり、真っ白に塗りつぶしたり、ある条件を満たすまで特定のページを強制的に表示したり、readme ページを表示したり、入力のために特別に設計されたページを表示したり、することができます。本節では、このようなコントロールの方法について学びます。

ページに関する基本的な命令には、PageUninstPage の2つがあります。最初の命令は、インストーラにページを追加し、2番目の命令は、アンインストーラにページを追加します。こらら2つ命令の上位に、PageEx 命令があります。この命令はインストーラとアンインストーラのどちらにもページを追加することが可能で、多くのオプションを指定することもできます。 PageEx の外で設定されるデフォルト設定を利用する代わりに、追加した特定のページに PageEx を利用してオプションを設定することができます。

4.5.1 ページ順序

ページ順序は、単純に、スクリプト内に出現する PageUninstPagePageEx の順序によって決定されます。例を示します。

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

このコードは、最初に「ライセンスページ」、次に「コンポーネント選択ページ」、次に「ディレクトリ選択ページ」、最後に「インストールログ」を表示するよう NSIS に指示します。アンインストーラは、最初に「アンインストール確認ページ」、次に「アンインストールログ」を表示します。

同じタイプのページを一回以上指定することもできます。

古い NSIS スクリプトとの後方互換のため、インストーラのページコマンドが使用されない場合は、次のページが追加されます。ライセンスページ license (LicenseTextLicenseData が指定されている場合)、コンポーネント選択ページ components (ComponentText が指定されており、ひとつ以上の目に見えるセクションが存在する場合)、ディレクトリ選択ページ directory (DirText が指定されている場合)、インストールログ instfiles です。アンインストーラのページコマンドが存在しない場合は、以下のページが追加されます。アンインストールの確認ページ uninstConfirm (UninstallText が指定されている場合)、アンインストールログ instfiles です。ただし、この方法は推奨されません。新しい標準言語文字列が使用可能なため、ページコマンドを使用するようにスクリプトを修正することが強く推奨されます。

4.5.2 ページ オプション

それぞれのページは、ページの見栄えや動作を定義するユニークなデータセットを持っています。この節では、各タイプのページでどのようなデータが利用され、どのように設定するのかについて説明します。コールバック関数 については、後節で説明するため、本節では扱いません。

以下のリストは、どのようなコマンドが、どの種類のページに影響するかを示しています。特に説明がない限りは、これらのコマンドは、 PageEx ブロックの内側でも外側でも利用できます。 PageEx ブロックの内側で利用された場合は、PageEx によって設定されている現在のページにのみ影響します。そうでない場合は、他のすべてのページのデフォルト値に設定されます。

ライセンスページ

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

ディレクトリ選択ページ

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

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

ページのキャプションを設定するには、 Caption を使用してください。

4.5.3 コールバック

それぞれの組み込みページは、pre_function、show_function/creation_function、leave_function の3種類のコールバック関数を持ちます。pre_function は、ページが作成される直前に呼び出され、show_function はページの作成直後、かつ表示の前に呼び出されます。leave_function はユーザが「次へ」ボタンを押した直後、かつページを離れる前に呼び出されます。

  • pre_function で Abort を利用すると、そのページをスキップすることができます。
  • show_function で CreateFontSetCtlColorsSendMessage などを利用すると、ページのユーザインターフェースを調整することができます。
  • leave_function で Abort を利用すると、ユーザを現在のページに強制的にとどまらせることができます。

カスタムページは、2つのコールバック関数のみを持ちます。ひとつは、ページを生成する creation_function であり、必ず設定が必要です。もうひとつは、leave_functio で、組み込みページと同様の動作をします。

例を示します。

 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]
  OR
internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]

インストーラのページを追加します。組み込みページ vs カスタムページ、コールバック関数についての詳細は、前節を参照してください。

internal_page_type に指定できる項目は以下のとおりです。

  • license - ライセンスページ
  • components -コンポーネント選択ページ
  • directory - インストールディレクトリの選択ページ
  • instfiles - セクションが実行されるインストールページ
  • uninstConfirm - アンインストールの確認ページ

混乱を避けるため、インストーラの最後のページの「キャンセル」ボタンは無効になっています。有効にするには、/ENABLECANCEL を使用します。

4.5.5 UninstPage

custom [creator_function] [leave_function] [caption] [/ENABLECANCEL]
  OR
internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]

アンインストーラのページを追加します。組み込みページ vs カスタムページ、コールバック関数についての詳細は、前節を参照してください。

internal_page_type に指定できる項目については、 Page を参照してください。

4.5.6 PageEx

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

インストーラのページを追加、あるいは un. を前につけるとアンインストーラのページを追加します。すべての PageEx には、対応する PageExEnd が必要です。PageEx ブロックの中では、このページに特有の(他のページに影響しない)オプションを設定することができます。設定されないオプションについては、PageEx ブロックの外側で設定された値、あるいは設定されていない場合はデフォルト値が使用されます。ページのサブキャプションを設定するには、Caption を使用します。あるいは、デフォルトを設定するために、 SubCaption を使用します。PageEx でコールバック関数を設定するためには、 PageCallbacks を使用します。組み込みページ vs カスタムページについての詳細は、前節を参照してください。

使い方の例です。

 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つ以上のセクションを含みます。それぞれのセクションは、以下のコマンドによって作成、修正、終了されます。

  • 各セクションは、0個以上の命令を含みます。
  • セクションはインストーラによって順番に実行されます。ComponentText が設定された場合、ユーザは各セクションの有効/無効を設定することができます。
  • セクションの名前が 'Uninstall' であるか、名前の前に 'un.' がついている場合は、アンインストーラのセクションとなります。

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 が指定されている場合は、引数はセクションのインデックスに !defined されます(インデックスは SectionSetText などで利用できます)。セクション名が '!' で始まる場合は、ボールド体で表示されます。/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" # これがインデクス 1
InstType "minimal" # これがインデクス 2

Section "a section"
SectionIn 1 2 # full および minimal で有効状態になる
SectionEnd

Section "another section"
SectionIn 1 # full で有効状態になる
SectionEnd

4.6.1.5 SectionGroup

[/e] section_group_name [index_output]

このコマンドはセクショングループを挿入します。セクショングループは SectionGroupEnd で閉じる必要があり、1つ以上のセクションを含まなくてはなりません。セクショングループの名前が '!' から始まる場合は、ボールド体で表示されます。/e が使用された場合は、デフォルトで展開された状態となります。index_output が指定された場合は、セクションのインデックスに !defined されます(SectionSetText などで利用できます)。名前が '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]

新しい関数を開始して開きます。'.' から始まる関数名(例: ".Whatever")は、通常、コールバック関数のために予約されています。'un.' から始まる関数名は、アンインストーラで使用する関数です。そのため、通常のセクションや関数からは、アンインストール関数を呼び出すことはできません。また、アンインストールセクションやアンインストール関数から、通常の関数を呼び出すこともできません。

Function func
  # some commands
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 はブランドテキストコントロールの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

2つ目の例です。

 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

このコールバックは、インストールが成功した際、インストール画面が閉じられる直前に呼び出されます。ただし、AutoCloseWindow あるいは SetAutoClose が 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: 1番目のセクションの説明"

    StrCmp $0 1 "" +2
      SendMessage $R0 ${WM_SETTEXT} 0 "STR: 2番目のセクションの説明"
  FunctionEnd
4.7.2.1.7 .onRebootFailed

このコールバックは、Reboot が失敗した場合に呼び出されます。このコールバック内では、WriteUninstallerプラグインFileWriteRegBin を利用すべきではありません。

例:

 Function .onRebootFailed
   MessageBox MB_OK|MB_ICONSTOP "再起動に失敗。手動で再起動してください。" /SD IDOK
 FunctionEnd
4.7.2.1.8 .onSelChange

コンポーネントページ における選択状態が変化した際に呼び出されます。SectionSetFlagsSectionGetFlags と共に利用します。

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

4.7.2.1.9 .onUserAbort

このコールバックは、インストールが失敗していない状態で、ユーザが 'キャンセル' を押した場合に呼び出されます。この関数から Abort が呼ばれた場合、インストールは中断されません。

例:

 Function .onUserAbort
   MessageBox MB_YESNO "インストールを中断しますか?" 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 を検証したり修正したりできる点に注意してください。

利用方法に関する2つの例を示します。

  Function un.onInit
    MessageBox MB_YESNO "This will uninstall. Continue?" IDYES NoAbort
      Abort ; インストーラを終了します。
    NoAbort:
  FunctionEnd

2つ目の例です。

  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 コマンドを使用した、何か失敗した、など)、ユーザが 'キャンセル' を押すと呼び出されます。

例:

  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プラグインFileWriteRegBin を利用すべきではありません。

例:

 Function un.onRebootFailed
   MessageBox MB_OK|MB_ICONSTOP "再起動に失敗。手動で再起動してください。" /SD IDOK
 FunctionEnd
4.7.2.2.7 un.onSelChange

コンポーネントページ における選択状態が変化した際に呼び出されます。SectionSetFlagsSectionGetFlags と共に利用します。

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

4.7.2.2.8 un.onUserAbort

このコールバックは、アンインストールが失敗していない状態で、ユーザが 'キャンセル' を押した場合に呼び出されます。この関数から Abort が呼ばれた場合、アンインストールは中断されません。

例:

  Function un.onUserAbort
    MessageBox MB_YESNO "アンインストールを中断しますか?" IDYES NoCancelAbort
      Abort ; アンインストーラは終了しません。
    NoCancelAbort:
  FunctionEnd

4.8 インストーラ属性

[原文]

4.8.1 一般的な属性

以下のコマンドはすべて、インストーラの属性を調整するために利用されます。これらの属性は、インストーラの見栄えや機能を制御します。どのページを表示するか、各ページの各部分にどのようなテキストを表示するか、インストーラの名前をどうするか、どのようなアイコンを使用するか、デフォルトのインストールディレクトリをどこにするか、どのファイルに書き出すか、などです。セクションや関数の内側を除き、これらの属性はファイルのあらゆる部分で設定することができます。

デフォルトはボールド体&下線

4.8.1.1 AddBrandingImage

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

ブランドの画像をインストーラの上部、あるいは下部、左部、右部に追加します。画像サイズは、指定された width|height およびインストーラの幅と高さ、インストーラのフォントに従って設定さます。最終的なサイズは、要求したものと同じになるとは限りません。実際のサイズについては、コマンドの出力を参照してください。これは、インストーラのフォントに依存するため、AddBrandingImage の前に SetFont を呼び出す必要があります。デフォルトの padding の値は 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 を利用します。引数が指定されなかった場合は、デフォルトのフォントが利用されます。デフォルトのフォントは、ボールドで斜体の Times New Roman です。

4.8.1.5 BGGradient

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

グラデーションの背景画面を利用するかどうかを指定します。off を指定した場合、インストーラは背景画面を表示しません。引数が指定されない場合は、黒から青へのデフォルトのグラデーションが使用されます。グラデーションの色を指定するには、上部の色 topc あるいは下部の色 botc を指定します。色は、 RRGGBB の形式で16進数で指定します。HTMLのように先頭に '#' をつける必要はありません。'#' はコメントに利用されるためです。textcolor も同様の形式です。notext を指定すると、背景の大きなテキストが非表示となります。

4.8.1.6 BrandingText

/TRIM(LEFT|RIGHT|CENTER) text

インストール画面の下部に表示されるテキストを text に設定します。デフォルトは 'Nullsoft Install System vX.XX' です。空の文字列を指定した場合もデフォルトの文字列が使用されます。空欄にしたい場合は、空白文字 ' ' を利用します。あなたにとって特に重要でないならば、このインストーラがどうして使いやすいのかをすべての人に知ってもらうために、デフォルト文字列のままにしておいてください。文字列のサイズにコントロールのサイズを縮小するには、/TRIMLEFT/TRIMRIGHT/TRIMCENTER を使用します。

変数が利用できます。変数を使用する場合は、それらの変数を .onInit で初期化しなくてはなりません。

4.8.1.7 Caption

caption

PageEx ブロックの外側で使用された場合、インストーラのタイトルバーに表示されるテキストを caption に設定します。デフォルトは 'Name Setup' で、Name の部分は Name 命令で設定されます。もちろん、'MyApp Installer' のように自由に設定することも可能です。空の文字列を指定した場合は、デフォルト文字列が使用されます。空欄にしたい場合は、空白 ' ' を指定します。

PageEx ブロックの内側で使用された場合、現在のページのサブキャプションを caption 設定します。

変数が利用できます。変数を使用する場合は、それらの変数を .onInit で初期化しなくてはなりません。

4.8.1.8 ChangeUI

dialog ui_file.exe

ダイアログ dialogIDD_LICENSEIDD_DIRIDD_SELCOMIDD_INSTIDD_INSTFILESIDD_UNINSTIDD_VERIFY)を、ui_file.exe 内の同じリソースID を持つダイアログに置き換えます。UI ファイルから、7つすべてのダイアログを一度に置換したい場合は、all を指定します。UI のいくつかの例については、NSIS ディレクトリの下の Contrib\UIs を参照してください。

  • IDD_LICENSEIDC_EDIT1 (RICHEDIT コントロール)を含む必要があります。
  • IDD_DIRIDC_DIR (edit box)、IDC_BROWSE (button)、IDC_CHECK1 (check box)を含む必要があります。
  • IDD_SELCOMIDC_TREE1 (SysTreeView32 コントロール)と IDC_COMBO1 (combo box)を含む必要があります。
  • IDD_INSTIDC_BACK (button)、 IDC_CHILDRECT (static control the size of all other dialogs)、 IDC_VERSTR (static)、 IDOK (button)、 IDCANCEL (button)を含む必要があります。ダイアログ内に image コントロール(SS_BITMAP スタイルの static)が見つかった場合、SetBrandingImage のデフォルトとして利用されます。
  • IDD_INSTFILESIDC_LIST1 (SysListView32 コントロール)、 IDC_PROGRESS (msctls_progress32 コントロール)、 IDC_SHOWDETAILS (button)を含む必要があります。
  • IDD_UNINSTIDC_EDIT1 (edit box)を含む必要があります。
  • IDD_VERIFYIDC_STR (static)を含む必要があります。
ChangeUI all "${NSISDIR}\Contrib\UIs\sdbarker_tiny.exe"

4.8.1.9 CheckBitmap

bitmap.bmp

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

このビットマップは 96x16 ピクセル、8bpp (256色)以下であり、16x16 ピクセルの6つの画像(順に、selection mask, not checked, checked, greyed out, unchecked & read-only, checked & read-only)を含む必要があります。マスク色にはマゼンダを使用します(この領域は透過されます)。

4.8.1.10 CompletedText

text

インストールが完了した際に表示されるデフォルトのテキスト("Completed")を text に置き換えます。引数が指定されなかった場合は、デフォルト文字列が使用されます。

変数が利用できます。変数を利用する場合は、メッセージが表示される前に初期化する必要があります。

4.8.1.11 ComponentText

[text [subtext] [subtext2]]

コンポーネントページにおけるデフォルトのテキストを変更するために利用します。

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

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

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

文字列が空の場合は、デフォルトの文字列が使用されます。

変数が利用できます。変数を利用する場合は、コンポーネントページが作成される前に初期化する必要があります。

4.8.1.12 CRCCheck

on|off|force

インストールを開始する前に、インストーラが自分自身の CRC チェックを実施するかどうかを指定します。force が指定されていない場合は、ユーザがコマンドラインから /NCRC を指定してインストーラを実行すると、 CRC は実施されません。その場合は破損した(破損しているかもしれない)インストーラが実行されることになります。

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」 ボタンのテキスト。

browse_dlg_text: 「Browse」 ボタンをクリックすると表示される 「Browse For Folder」 ダイアログのテキスト。

文字列が空の場合は、デフォルト文字列が使用されます。

変数が利用できます。変数を使用する場合は、ディレクトリページが作成される前に初期化する必要があります。

4.8.1.15 DirVar

user_var(dir input/output)

選択されたディレクトリ名を格納するための変数を指定します。この変数はデフォルトの値も持つべきです。これにより、$INSTDIR の値を操作する必要のない、二つの異なるディレクトリページを簡単に作成することができます。デフォルトの変数は $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

leave を指定した場合、インストールディレクトリが有効でない場合、あるいは十分な容量がない場合でも、「次へ」ボタンが無効になりません。その場合は代わりに、 GetInstDirError を利用してフラグを読み出すことができます。

PageEx directory
  DirVerify leave
  PageCallbacks "" "" dirLeave
PageExEnd

4.8.1.17 FileErrorText

file_error_text

ファイルへの書き込みができない場合に表示されるテキストを設定します。この文字列には、ファイル名を保持している $0 を含めることができます($0 は一時的にファイル名に変更されます)。例えば、"Can not write to file $\r$\n$0$\r$\ngood luck." のように使用できます。

変数が利用できます。変数を利用する場合は、File を利用する前に初期化する必要があります。

4.8.1.18 Icon

[path\]icon.ico

インストーラのアイコンを設定します。アイコンファイル内のすべてのアイコンがインストーラに取り込まれます。アンインストーラのアイコンを設定するには、UninstallIcon を使用します。

4.8.1.19 InstallButtonText

install_button_text

「Install」ボタンのテキストを install_button_text に設定します。

変数が利用できます。変数を利用する場合は、 「Install」ボタンが表示される前に初期化する必要があります。

4.8.1.20 InstallColors

/windows | (foreground_color background_color)

インストール情報画面の色を設定します。デフォルトは、00FF00 000000 です。色は、 RRGGBB の形式で16進数で指定します。HTMLのように先頭に '#' をつける必要はありません。'#' はコメントに利用されるためです。"/windows" が引数に指定された場合は、windows のデフォルト色が使用されます。

4.8.1.21 InstallDir

definstdir

デフォルトのインストールディレクトリを設定します。ディレクトリを指定する際に使用できる変数については、 変数 を参照してください(特に $PROGRAMFILES)。インストールディレクトリの最後の '\' 以降の部分文字列は、ユーザが「browse」を選択した際に利用され、インストール時には文字列の後ろに追加されます。これを無効にするには、ディレクトリの最後を '\' にします。この場合は、引数の全体をクォートで括る必要があります。理解できないようであれば、「browse」ボタンで少し遊んでみてください。

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 を設定します。

Language 文字列および変数は、InstallDirRegKeyand では使用することができません。

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

4.8.1.23 InstProgressFlags

[flag [...]]

flag に指定できる値は、smooth (滑らかなプログレスバー)、あるいは colored(InstallColors で設定された色のプログレスバー)です。

InstProgressFlags ; デフォルトの古い Windows のスタイル
InstProgressFlags smooth ; 滑らかな新しいスタイル
InstProgressFlags smooth colored ; 滑らかで色つきのスタイル
注意: インストーラが Windows XP のモダンテーマで実行されている場合、XPStyleon であると、smoothcolored も動作しません。

4.8.1.24 InstType

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

インストールタイプの一覧に、インストールタイプを追加します。あるいは、カスタムインストール(インストールするコンポーネントを自由に選択する形式)を利用できないようにします。32種類まで設定でき、インストールタイプの名前を指定します。名前が 'un.' から始まるものは、アンインストーラのインストールタイプとなります。名前には、変数を利用することができ、変数はコンポーネントページが表示された後、実行時に処理されます。実行時にインストールタイプの名前を変更するには、InstTypeSetText を利用します。違いは、InstTypeSetText を利用すると、貴重なユーザ変数が節約できるという点です。最初のタイプがデフォルトになります(通常は「Typical」)。/NOCUSTOM スイッチが指定された場合は、インストールタイプ「custom」は無効になります。この場合、ユーザは事前に定義されたインストールタイプの中から1つを選択することになります。/CUSTOMSTRING スイッチを指定すると、「custom」の文字列を引数で上書きすることができます。/COMPONENTSONLYONCUSTOM フラグを指定した場合は、インストールタイプ「custom」が選択された場合にのみ、コンポーネントリストが表示されるようになります。

タイプ名に変数を利用することができます。変数を利用する場合は、コンポーネントページが作成される前に初期化する必要があります。

4.8.1.25 LicenseBkColor

color | /gray | /windows

ライセンスデータの背景色を設定します。色は、 RRGGBB の形式で16進数で指定します。HTMLのように先頭に '#' をつける必要はありません。'#' はコメントに利用されるためです。デフォルトは /gray です。/windows を指定すると、Windows OS で定義された色を使用することもできます。

4.8.1.26 LicenseData

licdata.(txt|rtf)

ユーザに提示するライセンスとして利用するテキストファイル、または RTF ファイルを指定します。ライセンスを表示する必要がない場合は、この命令を省略してください。ファイルは DOS テキストの形式(\r\n)で作成する必要があります。多言語のライセンスを定義するには、LicenseLangString を使用してください。

RTF ファイルでライセンスファイルを作成する場合、MS Word ではなくWordPad で編集することを推奨します。WordPad を使用するとより小さいサイズのファイルが作成できます。

各言語に対して、異なるライセンスを表示するには、LicenseLangString を使用します。

4.8.1.27 LicenseForceSelection

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

表示されたライセンスに対して同意が必要がどうかを指定します。これは、チェックボックス、またはラジオボタンによってなされます。デフォルトでは、チェックボックスがチェックされるか、正しいラジオボタンが選択された場合にのみ、「次へ」ボタンが有効になります。off を指定した場合は、「次へ」ボタンはデフォルトで有効になります。

LicenseForceSelection checkbox
LicenseForceSelection checkbox "同意する"
LicenseForceSelection radiobuttons
LicenseForceSelection radiobuttons "同意する"
LicenseForceSelection radiobuttons "同意する" "同意しない"
LicenseForceSelection radiobuttons "" "同意しない"
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]

インストーラの名前 nameを設定します。通常、名前は単に製品の名前です(例: 'MyApp'、'CrapSoft MyApp')。名前の文字列にアンパサンド( & )が含まれる場合は、2番目のパラメータに、アンパサンドを2重にした同じ名前を設定してください。例えば、製品名が "Foo & Bar" の場合は、以下のようにします。

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

名前の文字列にアンパサンドが含まれており、名前に LangString を使用した場合は、2番目のパラメータにアンパサンドを2重にした同じ名前を設定した Name 命令も作成する必要があります。

変数が利用できます。変数を使用する場合は、.onInit で初期化する必要があります。

4.8.1.31 OutFile

[path\]install.exe

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

4.8.1.32 RequestExecutionLevel

none|user|highest|admin

Windows Vista と Windows 7 において要求される実行レベルを指定します。この値はインストーラおよびアンインストーラの XML マニフェストに埋め込まれ、Vista/7 やそれ以降の Windows に対して、インストーラが必要とする特権レベルを通知します。user は、管理者権限をもたない通常ユーザレベルを要求します。highest は、現在のユーザで利用可能な最も高い実行レベルを要求します。この場合、権限の昇格を確認するためのプロンプトが Windows によって表示されます。プロンプトでは、ユーザのパスワードが要求されます。admin は、管理者権限を要求し、同様に Windows によってプロンプトが表示されます。none を指定した場合(デフォルト)、マニフェストは空となり、どの実行レベルが必要かは Windows が判断します。Windows Vista/7 は、自動的に NSIS を認識し、管理者権限を要求します。そのため、noneadmin は実質的に同じ効果を持ちます。

少なくともマイクロソフトは、すべてのアプリケーションに必要な実行レベルの情報を付与するよう推奨しています。情報のないインストーラは、互換モードの下に置かれます。このモードの回避策には、ユーザのスタートメニューに作成されたすべてのショートカットを、自動的に「すべてのユーザ」のスタートメニューに移動するというものがあります。システムフォルダへのインストールやローカルマシンレジストリ(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 を指定してインストーラを実行すると、silent が使用された場合と同様に、サイレントモードで動作します。LogSet も参照してください。

詳細な情報については、 4.12 節を参照してください。

4.8.1.37 SilentUnInstall

normal|silent

アンインストーラをサイレントモードで実行するかどうかを指定します。silent あるいは silentlog を指定した場合は、アンインストールセクションは、アンインストーラからの画面出力なしでアンインストールされます。この場合においても、スクリプトは必要なものを表示することができます。サイレントインストーラにおけるデフォルトの値を指定するには、MessageBox の /SD を使用してください。注意点としては、normal を指定した場合でも、ユーザがコマンドラインで /S を指定してアンインストーラを実行すると、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」ボタンのテキストを変更します。パラメータが指定されない場合は、デフォルトの文字列が使用されます。WriteUninstaller (UninstallEXENameを置換する)も参照してください。

変数が利用できます。変数を利用する場合は、アンインストールボタンが表示される前に初期化する必要があります。

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 # ここでは、overwrite は常に off !

代わりに、以下のようにします。

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

4.8.2.1 AllowSkipFiles

on|off

このコマンドは、ユーザがファイルをスキップできるようにするかどうかを指定します。ユーザがファイルをスキップできるようにするには、SetOverwriteon (デフォルト)に設定する必要があります。スキップすると、ファイルを抽出しようとする際に、インストーラは書き込みのためのファイルをオープンしません。off に設定した場合、ファイルをスキップするための「Ignore」ボタンは表示されず、ユーザにはインストールを中断するための「Cancel」ボタンか、出力ファイルのオープンをリトライするための「Retry」ボタンだけが表示されます。on に設定した場合、ユーザはファイルをスキップすることができるようになります(エラーフラグがセットされます、SetOverwrite を参照)。

4.8.2.2 FileBufSize

buffer_size_in_mb

このコマンドは、コンパイラ内部のファイルバッファのサイズを設定します。どれくらいのファイルを一度にメモリに読み込むのかを制限することによって、コンパイラのメモリ使用を制御することを可能とします。コンパイラは入力と出力の両方を必要とするため、指定された2倍のメモリサイズをファイルバッファとして使用します。このコマンドは、圧縮バッファ(数 MB)や、その他の内部バッファ(通常、最大 1MB 程度)のサイズは制限しません。非常に小さい数値を指定すると、性能が低下します。また非常に大きい数値を指定すると、システムリソースを占有してしまい、強制的にコンパイル処理が中断される可能性があります。デフォルト値は 32MB です。

4.8.2.3 SetCompress

auto|force|off

このコマンドは、データを圧縮するかどうかの圧縮フラグ設定します。通常、SetCompress フラグは、それ以降のコマンドに対して有効です。また、ファイルの最後の SetCompress コマンドは、インストール情報セクションやアンインストールデータを圧縮するかどうかを決定します。auto が設定された場合は、圧縮後のサイズが圧縮前のサイズよりも小さいならば、ファイルは圧縮されます。force が設定された場合は、常に圧縮されます。off が設定された場合は、圧縮されません(非常に高速です)。

注意: Solid 圧縮が使用された場合は、このオプションは効果を持ちません。

4.8.2.4 SetCompressor

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

このコマンドは、インストーラ内のファイルやデータを圧縮するための圧縮アルゴリズムを設定します。このコマンドは、セクションや関数の外側、データがひとつも圧縮されていない段階でのみ使用することができます。同じインストーラ内で、ファイルごとに異なる圧縮手法を使用することはできません。コンパイルエラーを避けるため、スクリプトの一番最初に本コマンドを記述することを推奨します。

サポートしている圧縮方式は、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 が使用された場合は、すべてのインストーラデータはひとつのブロックに圧縮されます。これにより、より高い圧縮率を得ることができます。

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

このコマンドは、ファイルの日時を保存するかどうかのフラグを設定します。on に設定すると、 File コマンドによってファイルの最終更新日時が保存され、インストール時にそれらが復元されます。on あるいは off が指定できます。デフォルトは on です。

4.8.2.8 SetOverwrite

on|off|try|ifnewer|ifdiff|lastused

このコマンドは、File コマンドが既存のファイルを上書きするかどうかを設定します。on が設定された場合はファイルは上書きされます(デフォルト)。on が設定された場合は、既存のファイルは上書きされません。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

ファイルのプロパティのバージョンタブにフィールドを追加します。システムによって提供されたフィールドでも ユーザ定義のフィールドでも可能です。以下のフィールドがシステムによって提供されています。

  • ProductName
  • Comments
  • CompanyName
  • LegalCopyright
  • FileDescription
  • FileVersion
  • ProductVersion
  • InternalName
  • LegalTrademarks
  • OriginalFilename
  • PrivateBuild
  • SpecialBuild

これらのフィールド名は、対象システムにおいて翻訳されます。ユーザ定義のフィールドは翻訳されないままになります。

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]

ファイルのプロパティのバージョンタブの上部に製品バージョン(Product Version)を追加します。

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 は作業ディレクトリとして使用されます。プロセスが起動できなかった場合はエラーフラグがセットされます。注意点: コマンドに空白が含まれる場合は、引数と区別するためにクォートで括る必要があります。Windows 9x では、引数の有無に関わらず、クォートで括らないと動作しません。

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

4.9.1.3 ExecShell

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

指定されたプログラムを ShellExecute を利用して実行します。通常の action は、"open", "print" などですが、空の文字列を指定してデフォルトのアクションが実行させることも可能です。parameters や表示タイプの指定はオプションです。$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 を参照してください。user_var が指定されない場合は、実行されたプログラムが0以外のエラーコードが返したり、エラーが発生したりすると、ExecWait はエラーフラグをセットします。user_var が指定された場合は、終了コードが格納されます(エラーが発生した場合はエラーフラグがセットされ、user_var の内容は未定義となります)。注意点: コマンドに空白が含まれる場合は、引数と区別するためにクォートで括る必要があります。Windows 9x では、引数の有無に関わらず、クォートで括らないと動作しません。

ExecWait '"$INSTDIR\command.exe" parameters'
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)に展開するファイルを追加します。

  • 出力ファイル名は $OUTDIR\filename_portion_of_file であるという点に注意してください。
  • 出力名を変更するには /oname=X スイッチを使用します。X は変数を含むことができます。また、完全に限定されたパスでも相対パスでも指定できます。相対パスの場合は、SetOutPath によって設定される $OUTDIR からのパスとなります。このスイッチを使用した場合は、複数のファイルを指定することはできません。出力名が空白を含む場合は、以下の例に示すように、 引数の全体(/oname も含む)をクォートする必要があります。
  • ワイルドカードがサポートされています。
  • /r スイッチが使用された場合は、マッチするファイルやディレクトリがサブディレクトリから再帰的に探索されます。1つのパスセグメントだけが指定された場合(例: File /r something)は、カレントディレクトリが再帰的に探索されます。ひとつ以上のセグメントが指定された場合(例: File /r something\*.*)は、最後のパスセグメントがマッチング条件として使用され、残りの部分は再帰的に探索するディレクトリとして使用されます。ディレクトリ名がマッチした場合、ディレクトリ内のすべてが再帰的に追加されます。ディレクトリ構造は保存されます。
  • ファイルやディレクトリを除外するには、/x スイッチを使用します。
  • 追加されたファイルの属性を保存するには、/a スイッチを使用します。
  • 上書きモードが try あるいは on でファイルが上書きできなかった場合、ユーザーが「Ignore」を選択した場合、File コマンドはエラーフラグをセットします。
  • /nonfatal スイッチが使用された場合、ファイルが見つからないと、エラーの代わりに警告が発行されます。
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 が存在してはいけません。dest_file が存在する場合、/REBOOTOK を使用しない限りは、移動に失敗します。/REBOOTOK が指定されている場合は、ファイルが移動できないと(例えば、移動先のファイルが存在する場合)、システムが再起動された際にファイルを移動します。再起動時にファイルが移動された場合は、リブートフラグがセットされます。ファイルの名前が変更できなかった場合(かつ /REBOOTOK が使用されていない場合)や、source_file が存在しない場合はエラーフラグがセットされます。

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

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

4.9.1.7 ReserveFile

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

後で使用するため、データブロックのファイルを予約します。ファイルは、スクリプトに出現した順に、圧縮データブロックに追加されます。しかしながら、関数はスクリプトに現れる順に呼び出されるとは限りません。初期に呼び出される関数内でファイルを追加し、その関数がスクリプトの最後に置かれている場合、必要なファイルを得るためには、それより前に追加されたすべてのファイルを展開する必要があります。多くのファイルが存在する場合、この処理には長い時間が必要となります。.onInit は、そのような関数のひとつです。この関数は、他の何かが表示される前の、かなり早い段階で呼び出されます。この関数がスクリプトのかなり後ろに置かれていると、関数内でファイルを展開した場合、かつ、それより前に多くのファイルが追加されていた場合、インストーラのロードに非常に長い時間が必要となります。このような状況において、このコマンドは有効です。ファイルをデータブロックの先頭に追加することにより、ロード処理を高速化することができます。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 フォルダ内のすべてを削除してしまいます。また、プログラムのファイルではない他のファイルを置いており、それらはプログラムによって削除されると思っているかもしれません。インストーラによってインストールされたファイルだけを簡単にアンインストールするための方法については、Uninstall only installed files を参照してください。

4.9.1.9 SetOutPath

outpath

出力パス($OUTDIR)を設定し、存在しない場合は作成します(必要であれば再帰的に)。フルパスで指定する必要があります。通常は $INSTDIR です($INSTDIR を "-" で指定することもできます)。

SetOutPath $INSTDIR
File program.exe

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

以下に示すレジストリ命令において、空の文字列("")はデフォルトのキー(regedit.exe で "(既定)" と表示されるキー)を指定するためのキー名として使用されます。

INI 操作命令において、フルパスが指定されない場合は、Windows ディレクトリが使用されます。

4.9.2.1 DeleteINISec

ini_filename section_name

INI ファイル 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 ファイル 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

レジストリキー subkey を削除します。/ifempty が指定された場合は、子のキーを持たない場合だけレジストリキーが削除されます。/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(output) root_key subkey index

root_key\subkey にある index 番目のレジストリキーの名前を、ユーザ変数 $x にセットします。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(output) root_key subkey index

root_key\subkey にある index 番目のレジストリ値の名前を、ユーザ変数 $x にセットします。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(output) string

string の環境変数を展開して、ユーザ変数 $x に格納します。環境変数が存在しない場合、置換されません。例えば、"%var%" を使用し、var が存在しない場合、結果は "%var" となります。エラーがある場合は、変数は空に設定され、エラーフラグがセットされます。

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

4.9.2.8 FlushINI

ini_filename

INI ファイルのバッファーをフラッシュします。Windows 9x は INI ファイルに対するすべての変更をメモリに保持しています。このコマンドは、変更を即座にディスクに書き出すよう指示します。このコマンドは、WriteINIStrDeleteINISecDeleteINStr によって変更した直後に、INI を手動で編集したり、削除したり、移動したり、コピーしたりする場合に利用します。

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

4.9.2.9 ReadEnvStr

user_var(output) name

環境変数 name から読み出して、ユーザ変数 $x にセットします。読み込みに失敗した場合は、ユーザ変数は空にセットされ、エラーフラグがセットされます。

ReadEnvStr $0 WINDIR
ReadEnvStr $1 TEMP

4.9.2.10 ReadINIStr

user_var(output) ini_filename section_name entry_name

INI ファイル ini_filename のセクション section_name 内の、entry_name から読み出して、ユーザ変数 $x にセットします。エントリーが見つからない場合、ユーザ変数には空の文字列が割り当てられ、エラーフラグがセットされます。

ReadINIStr $0 $INSTDIR\winamp.ini winamp outname

4.9.2.11 ReadRegDWORD

user_var(output) root_key sub_key name

レジストリから 32 ビットの DWORD を、ユーザ変数 $x に読み出します。root_key に指定可能な値については、WriteRegStr で一覧を示します。DWORD が存在しない場合は、エラーフラグがセットされ、ユーザ変数には空の文字列(0を表す "")がセットされます。値は存在するが、DWORD でない場合は、文字列として読まれます。このとき、エラーフラグがセットされます。

ReadRegDWORD $0 HKLM Software\NSIS VersionBuild

4.9.2.12 ReadRegStr

user_var(output) root_key sub_key name

レジストリから読み出して、ユーザ変数 $x にセットします。root_key に指定可能な値については、WriteRegStr で一覧を示します。文字列が存在しない場合は、エラーフラグがセットされ、ユーザ変数には空の文字列がセットされます。値は存在するが、REG_DWORD(訳注:REG_SZでは?) でない場合は、文字列に変換されて読まれます。このとき、エラーフラグがセットされます。

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

4.9.2.13 WriteINIStr

ini_filename section_name entry_name value

INI ファイル ini_filename のセクション section_name に、entry_name=value を書きます。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 には、以下のいずれかを指定します。

  • HKCR もしくは HKEY_CLASSES_ROOT
  • HKLM もしくは HKEY_LOCAL_MACHINE
  • HKCU もしくは HKEY_CURRENT_USER
  • HKU もしくは HKEY_USERS
  • HKCC もしくは HKEY_CURRENT_CONFIG
  • HKDD もしくは HKEY_DYN_DATA
  • HKPD もしくは HKEY_PERFORMANCE_DATA
  • SHCTX もしくは SHELL_CONTEXT

root_key が、SHCTX もしくは SHELL_CONTEXT の場合については、SetShellVarContextall にセットされている場合は HKLM に、current にセットされている場合は HKCU に置換されます。

文字列がレジストリに書き込めない場合、エラーフラグがセットされます。文字列の型は、WriteRegStr は REG_SZ、WriteRegExpandStr は REG_EXPAND_STR になります。レジストリキーが存在しない場合は、作成されます。

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]

インストールシステムのおいて、コピー元 filespec_on_destsys からコピー先 destination_path へファイルをコピーします。インストールメディアからコピーする場合や、システムのある場所からある場所へコピーする場合に、$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]]]]]]

target.file へのショートカット link.lnk を作成します。付加パラメータは parameters で指定します。ショートカットに使われるアイコンは icon.fileicon_index_number で指定します。デフォルトのアイコン設定を使う場合は、icon.fileicon_index_number に空の文字列を指定します。 start_options には、SW_SHOWNORMALSW_SHOWMAXIMIZEDSW_SHOWMINIMIZED、空の文字列のいずれかを指定します。keyboard_shortcut は、'flag|c' の形式で指定します。flag は、ALTCONTROLEXTSHIFT の組み合わせ(| を使用)です。c は、使用する文字です(a-z、A-Z、0-9、F1-F24 など)。空白は指定できない点に注意してください。例えば、"ALT|CONTROL|F8" のように指定します。$OUTDIR が作業ディレクトリとして使用されます。ショートカットを作成する前に、SetOutPath を使用すれば作業ディレクトリを変更することができます。description はショートカットの説明です。XP ではコメントと呼ばれています。ショートカットが作成できなかった場合は(link や target のパスが存在しない場合など)、エラーフラグがセットされます。

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 output) user_var(low dword output)

filename という名前の DLL (あるいはバージョン情報を含むその他の実行ファイル)からバージョン情報を取得します。成功した場合は、バージョン情報の 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 output) user_var(low dword output)

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

4.9.3.7 GetFileTime

filename user_var(high dword output) user_var(low dword output)

filename の最終更新日時を取得します。成功した場合は、タイムスタンプの DWORD の上位、下位がユーザ変数にセットされます。失敗した場合は、出力は空であり、エラーフラグがセットされます。

4.9.3.8 GetFileTimeLocal

localfilename user_var(high dword output) user_var(low dword output)

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

4.9.3.9 GetFullPathName

[/SHORT] user_var(output) path_or_file

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

StrCpy $INSTDIR $PROGRAMFILES\NSIS
SetOutPath $INSTDIR
GetFullPathName $0 ..
DetailPrint $0 # will print C:\Program Files
GetFullPathName /SHORT $0 $INSTDIR
DetailPrint $0 # will print 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 # will print C:\Program Files\NSIS, where supported

4.9.3.10 GetTempFileName

user_var(output) base_dir

一時ファイルの名前を、ユーザー変数 $x に格納します。ファイルは作成されるため、後で上書きすることができます。一時ファイルの名前はユニークになるように生成されます。Windows の一時ディレクトリではなく、他のディレクトリに一時ファイルを作成したい場合は、base_dir を指定します。作業が終わったら、ファイルを削除してください。

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

4.9.3.11 SearchPath

user_var(output) filename

filename のフルパスを、ユーザー変数 $x に格納します。ファイルが見つからない場合は、エラーフラグがセットされ、$x は空になります。システムパスからファイルを検索する場合に、SearchPath を使用します。

4.9.3.12 SetFileAttributes

filename attribute1|attribute2|...

filename のファイル属性を設定します。以下の属性を | で組み合わせて指定します。

  • NORMAL もしくは FILE_ATTRIBUTE_NORMAL (省略のために 0 を使うことができる)
  • ARCHIVE もしくは FILE_ATTRIBUTE_ARCHIVE
  • HIDDEN もしくは FILE_ATTRIBUTE_HIDDEN
  • OFFLINE もしくは FILE_ATTRIBUTE_OFFLINE
  • READONLY もしくは FILE_ATTRIBUTE_READONLY
  • SYSTEM もしくは FILE_ATTRIBUTE_SYSTEM
  • TEMPORARY もしくは FILE_ATTRIBUTE_TEMPORARY

ファイル属性が設定できなかった場合(ファイルが存在しない、権限がないなど)、エラーフラグがセットされます。属性を設定することだけができます。解除することはできません。属性を取り除きたい場合は、NORMAL を使用します。この方法は、すべての属性を取り除きます。このコマンドは、ワイルドカードをサポートしていません。

4.9.3.13 RegDLL

dllfile [entrypoint_name]

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

他の 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
Abort "can't install"

4.9.4.2 Call

function_name | :label_name | user_var(input)

function_name という名前の関数、label_name という名前のラベル、アドレスを保持している変数を呼び出します。アドレスは、GetCurrentAddressGetFunctionAddressGetLabelAddress によって取得できます。呼び出し先において、Return 命令が実行されると、呼び出し元へ戻ります。セクションや関数は、自動的に Return 命令で終了しています。アンインストール関数は、インストーラの関数やセクションから呼び出すことができません。逆も同様です。

Function func
  Call :label
  DetailPrint "#1: これは、一回だけ表示される。"
label:
  DetailPrint "#2: これは、メッセージ #1 の前後で表示される。"
  Call :.global_label
FunctionEnd

Section
  Call func
  Return

.global_label:
  DetailPrint "#3: global label が呼び出された"
SectionEnd

4.9.4.3 ClearErrors

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

ClearErrors
IfErrors 0 +2
  MessageBox MB_OK "このメッセージボックスは表示されません"

4.9.4.4 GetCurrentAddress

user_var(output)

現在の命令のアドレスを取得して、ユーザ変数に格納します。その後、ユーザ変数は 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(output) 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(output) 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 が返されます。これは、ファイルの作成や上書きに失敗した際にユーザが Abort を選択するか、ユーザが手動で Abort した場合に発生します。この関数は、instfiles ページの leave_function からのみ呼び出すことができます。

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 にジャンプします。サイレントフラグは、 SilentInstallSilentUninstallSetSilentによってセットされます。コマンドラインで /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つの整数 val1val2 を比較します。val1val2 が等しい場合は 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つの符号なし整数 val1val2 を比較します。val1val2 が等しい場合は 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 は以下を | で組み合わせて指定します(例: MB_YESNO|MB_ICONSTOP)。

  • MB_OK - OK ボタンを表示
  • MB_OKCANCEL - OK と キャンセル ボタンを表示
  • MB_ABORTRETRYIGNORE - 中止、再試行、無視 ボタンを表示
  • MB_RETRYCANCEL - 再試行 と キャンセル ボタンを表示
  • MB_YESNO - はい と いいえ ボタンを表示
  • MB_YESNOCANCEL - はい、いいえ、キャンセル ボタンを表示
  • MB_ICONEXCLAMATION - エクスクラメーションアイコンを表示
  • MB_ICONINFORMATION - インフォメーションアイコンを表示
  • MB_ICONQUESTION - クエスチョンマークアイコンを表示
  • MB_ICONSTOP - ストップアイコンを表示
  • MB_USERICON - インストーラのアイコンを表示
  • MB_TOPMOST - メッセージボックスを最前面にする
  • MB_SETFOREGROUND - フォアグラウンドウインドウにする
  • MB_RIGHT - テキストを右寄せにする
  • MB_RTLREADING - テキストを右から左へ表示する
  • MB_DEFBUTTON1 - Button 1 をデフォルトにする
  • MB_DEFBUTTON2 - Button 2 をデフォルトにする
  • MB_DEFBUTTON3 - Button 3 をデフォルトにする
  • MB_DEFBUTTON4 - Button 4 をデフォルトにする

return_check には 0 (または空の文字列、または引数の指定なし)、または、以下のいずれかが指定できます。

  • IDABORT - 中止 ボタン
  • IDCANCEL - キャンセル ボタン
  • IDIGNORE - 無視 ボタン
  • IDNO - いいえ ボタン
  • IDOK - OK ボタン
  • IDRETRY - 再試行 ボタン
  • IDYES - はい ボタン

MessageBox の返り値が return_check である場合、インストーラは jumpto にジャンプします。

インストーラがサイレントの場合に使用されるオプションを指定するためには、/SD を使用します。return には、上述の return_check の値のひとつを指定します。詳細については、 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]

str1str2 を比較します(大文字と小文字を区別しない)。 str1str2 が等しい場合は 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(handle output) filename openmode

filename という名前のファイルを開き、ユーザ変数にファイルハンドルを格納します。openmode には、"r" (読み取り用)、 "w" (書き込み用、既存ファイルの内容はクリアされる)、 "a" (追加書き込み用、読み書き用に開かれ、内容は保持される)のいずれかを指定します。すべての openmode において、ファイルポインタは、ファイルの先頭に置かれます。ファイルが開けない場合、ハンドルは空にセットされ、エラーフラグがセットされます。

絶対パスが指定されない場合は、カレントフォルダが使用されます。カレントフォルダは、最後の SetOutPath 命令で設定されたフォルダです。SetOutPath を一度も使用していない場合、カレントフォルダは $EXEDIR です。

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

4.9.5.3 FileRead

handle user_var(output) [maxlen]

FileOpen で開かれたファイルから文字列を読みます。文字列は改行(\n あるいは \r\n)か、 null バイトまで読み込まれます。maxlen が指定されている場合は、maxlen に到達しても、読み込みが終了します。デフォルトでは、文字列は 1024 文字に制限されています(より大きな NSIS_MAX_STRLEN を指定した特別なビルドをコンパイルしたりダウンロードしたりできます)。EOF(End Of File)に到達し、それ以上のデータがなくなると、出力文字列は空になり、エラーフラグがセットされます。

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(output)

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(new position)]

FileOpen で開かれたファイルをシークします。mode に何も指定しないか、SET を指定した場合は、ファイルポインタをファイルの先頭から offset の位置に移動します。modeCUR を指定した場合は、現在の位置から offset の位置に移動します。modeEND を指定した場合は、sファイルの末尾から offset の位置に移動します。最後の引数 user_var を指定した場合は、変数に新しいファイル位置が格納されます。

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

FileOpen で開かれたファイルに、文字列 string を整数に変換して書き込みます。もちろん、整数値を直接入力することもできます。以下のコードは、CR(13)とLF(10)を書き込みます(改行します)。

FileWriteByte file_handle "13"
FileWriteByte file_handle "10"

書き込みエラーが発生した場合、エラーフラグがセットされます。注意: 整数の下位バイトが使用されます。例えば 256(0x0100) を書くことと 0(0x0000) を書くことは同じです。

4.9.5.8 FindClose

handle

FindFirst で開かれた検索を閉じます。

4.9.5.9 FindFirst

user_var(handle output) user_var(filename output) filespec

filespec を検索し、最初に見つかったファイルを filename_output(ユーザ変数)に格納します。また、検索ハンドルを handle_output(ユーザ変数)に格納します。ファイルが見つからない場合、出力は両方とも空になり、エラーフラグがセットされます。FindNext や FindClose と一緒に使用します。注意: 見つかったファイル名は、パスなしでユーザ変数に格納されます。

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

4.9.5.10 FindNext

handle user_var(filename_output)

FindFirst で開始された検索を継続します。handle には、FindFirst から返された検索ハンドルを渡します。検索が完了した(それ以上ファイルがない)場合は、filename_output は空がセットされ、エラーフラグがセットされます。注意: 見つかったファイル名は、パスなしでユーザ変数に格納されます。

4.9.6 アンインストーラ命令

4.9.6.1 WriteUninstaller

[Path\]exename.exe

指定された(パス付きの)ファイル名をアンインストーラに書き込みます。インストールセクションかインストール関数内からのみ利用でき、スクリプト内にアンインストールセクションが存在する必要があります。アンインストール設定の節も参照してください。アンインストーラのコピーを1回以上書き出すためには、これを一回以上呼び出します。

WriteUninstaller $INSTDIR\uninstaller.exe

4.9.7 その他の命令

4.9.7.1 GetErrorLevel

user_var(error level output)

SetErrorLevel によって最後に設定されたエラーレベルを取得します。一度も設定されていない場合は -1 が返ります。

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

4.9.7.2 GetInstDirError

user_var(error output)

ディレクトリページの leave_function で使用します。'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 "有効なインストールディレクトリ"
      ${Break}
    ${Case} 1
      MessageBox MB_OK "不正なインストールディレクトリ!"
      Abort
      ${Break}
    ${Case} 2
      MessageBox MB_OK "十分な空き領域がない!"
      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 に設定します。 詳細については、エラーレベル を参照してください。

IfRebootFlag 0 +2
  SetErrorLevel 4

4.9.7.6 SetRegView

32|64|lastused

レジストリ命令 の影響を受けるレジストリビューを設定します。Windows x64 では、2つのビューがあります。ひとつは 32 ビットアプリケーションで、もうひとつは x64 アプリケーションです。デフォルトは、WOW64 下の x64 システムで動作する 32 ビットアプリケーションは、32 ビットビューにのみアクセスできます。"SetRegView 64" とすると、インストーラはレジストリの x64 ビューのキーにアクセスできるようになります。

DeleteRegKeyDeleteRegValueEnumRegKeyEnumRegValueReadRegDWORDReadRegStrWriteRegBinWriteRegDWORDWriteRegStrWriteRegExpandStr の動作に影響を与えます。

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 が設定された場合は、「すべてのユーザ」のシェルフォルダが使用されます。「すべてのユーザ」のフォルダをサポートしていない OS もあります。「すべてのユーザ」フォルダが見つからない場合は、カレントユーザのフォルダが使用されます。「通常のユーザ」は、「すべてのユーザ」の領域への書き込み権限を持っていないという点に注意してください。管理者のみが「すべてのユーザ」領域への全アクセス権限を持っています。UserInfo プラグインを使用することで、これをチェックすることができます。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(destination) str [maxlen] [start_offset]

ユーザ変数 $x に str を設定します。str には、他の変数や、同じユーザ変数を含めることができます(これにより文字列を連結したりすることが可能です)。maxlen が指定された場合、文字列の最大文字数は maxlen になります。maxlen が負の場合、文字列の終わりから abs(maxlen) 文字に切り詰められます。start_offset が指定された場合、入力文字列のオフセットとして使用されます。start_offset が負の場合、文字列の終わりから abs(start_offset) の位置がオフセットとなります。

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(length output) str

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

StrLen $0 "123456" # = 6

4.9.9 スタックのサポート

4.9.9.1 Exch

[user_var | stack_index]

引数が指定されない場合は、スタックの先頭にある2つの要素が交換されます。引数にユーザ変数が指定された場合は、スタックの先頭の要素とユーザ変数が交換されます。引数に正の整数が指定された場合は、先頭の要素と、先頭からオフセット stack_index の位置にある要素を交換します。スタックに十分な要素が存在せず、交換できない場合は、致命的なエラーが発生します(デバッグ作業を助けるため)。

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(out)

スタックから文字列をポップして、ユーザ変数 $x に格納します。スタックが空の場合は、エラーフラグがセットされます。

Push 1
Pop $0 # = 1

4.9.9.3 Push

string

スタックに文字列をプッシュします。文字列は後でスタックからポップすることができます。

Push "a string"

4.9.10 整数のサポート

4.9.10.1 IntFmt

user_var(output) format numberstring

フォーマット format を使用して、numberstring の数字を整形し、結果をユーザ変数 $x に格納します。フォーマット文字列の例は、"%08X" "%u" のようです。

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

4.9.10.2 IntOp

user_var(output) value1 OP [value2]

value1value2OP に依存)を組み合わせて、指定されたユーザ変数 user_var に格納します。OP には以下のいずれかを指定します。

  • +    value1value2 の加算
  • -    value1 から value2 の減算
  • *    value1value2 の乗算
  • /    value1value2 による除算
  • %    value1value2 による剰余
  • |    value1value2 のビット和(OR)
  • &    value1value2 のビット積(AND)
  • ^    value1value2 のビット排他的論理和(XOR)
  • >>    value1value2 ビットだけ右シフト
  • <<    value1value2 ビットだけ左シフト
  • ~    value1 のビット否定 (例: 7 は 4294967288に)
  • !    value1 の論理否定 (例: 7 は 0 に)
  • ||    value1value2 の論理和(OR)
  • &&    value1value2 の論理積(AND)
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

リブートフラグを truefalse に設定します。このフラグの値は、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 のコンパイルについての詳細については、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ビットの整数です。第1ビット(最下位)は、セクションが現在、選択されているいるかどうかを表します。第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
  # セクション 'test' を選択状態、および読み取り専用に設定する。
  IntOp $0 ${SF_SELECTED} | ${SF_RO}
  SectionSetFlags ${test_section_id} $0
FunctionEnd

4.9.13.2 SectionGetFlags

section_index user_var(output)

セクションのフラグを取得します。フラグの説明については、SectionSetFlags を参照してください。範囲外のセクションが指定された場合は、エラーフラグがセットされます。

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_text に空の文字列 "" を設定すると、隠しセクションとなります。範囲外のセクションが指定された場合は、エラーフラグがセットされます。

Section "" test_section_id
SectionEnd

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

4.9.13.4 SectionGetText

section_index user_var(output)

セクション 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 で指定されたセクションのインストールタイプを設定します。section_index は0から始まるという点に注意してください。inst_types の各ビットは、セクションがそのインストールタイプに含まれるかどうかを表すフラグとなっています。例えば、3つのインストールタイプがあり、第1のセクションがインストールタイプ 1 と 3 に含まれる場合、コマンドは以下のようになります。

SectionSetInstTypes 0 5

5 は2進数で表記すると、"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(output)

セクションのインストールタイプフラグを取得する。出力値の意味については、上述の 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_index は0から始まるという点に注意してください。new_size はキロバイトで指定します。整数のみサポートします。

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_index は0から始まるという点に注意してください。

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

現在のインストールタイプを設定します。inst_type_idx は 0 から 31 の範囲でなくてはなりません。範囲外のインストールタイプが使用されてもエラーフラグはセットされません

4.9.13.10 GetCurInstType

user_var

現在のインストールタイプを取得し、user_var に格納します。最初のインストールタイプが選択された場合、user_var には 0 が格納されます。2番目が選択された場合は、1 が格納されます。${NSIS_MAX_INST_TYPES} の値(デフォルトは32)は、カスタムインストールタイプが選択されたことを意味します。

4.9.13.11 InstTypeSetText

inst_type_idx text

指定されたインストールタイプのテキストを設定します。テキストが空の場合は、そのインストールタイプは取り除かれます。使用されていない inst_type_idx を使用して、新しいインストールタイプを作成することができます。この新しいインストールタイプに、セクションを追加、削除する方法については、 SectionSetInstTypes を参照してください。SectionIn とは異なり、インデクスは 0 から始まります。

InstType a
InstType b

Function .onInit
  # 第1のインストールタイプの名前を $WINDIR に設定する
  InstTypeSetText 0 $WINDIR
  # 第2のインストールタイプの名前を $TEMP に設定する
  InstTypeSetText 1 $TEMP
FunctionEnd

4.9.13.12 InstTypeGetText

inst_type_idx user_var

指定されたインストールタイプのテキストを取得する。

InstType a
InstType b

Function .onInit
  InstTypeGetText 0 $0
  DetailPrint $0 # prints 'a'
  InstTypeGetText 1 $0
  DetailPrint $0 # prints 'b'
FunctionEnd

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

4.9.14.1 BringToFront

インストーラ画面を可視状態にして、前面に表示します。インストーラの前面に現れるアプリケーションが実行されている場合、BringToFront はインストーラにフォーカスを戻します。

最近のウインドウズのバージョンでは、前面ウインドウの設定が制限されています。インストール中、他のアプリケーションで作業している場合は、他の方法を使って通知されるかもしれません。

4.9.14.2 CreateFont

user_var(handle output) face_name [height] [weight] [/ITALIC] [/UNDERLINE] [/STRIKE]

フォントを作成し、そのハンドルをユーザ変数に格納します。他のパラメータについての詳細は、 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 output) windowclass [windowtitle] [windowparent] [childafter]

ウインドウを探索します。Win32 の FindWindowEx() のような動作をします。ウインドウクラス windowclass や、ウインドウタイトル windowtitle )によって探索します。windowparent あるいは childafter が指定されている場合は、探索はそのように制限されます。windowclasswindowtitle に "" が指定された場合、それらは検索に使用されません。ウインドウが見つからない場合は、ユーザ変数には 0 が返ります。 FindWindow のような古いスタイルの動作を実現するには、FindWindow と SendMessage を利用します。

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

4.9.14.6 GetDlgItem

user_var(output) dialog item_id

指定されたダイアログボックス dialogから、item_id で識別されるコントロールのハンドルを取得します。内部ダイアログ上のコントロールのハンドルを取得したい場合は、まず、「FindWindow user_var(output) "#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 "ウインドウが見つかった"
  Goto +2
  MessageBox MB_OK "ウインドウではない"

4.9.14.9 LockWindow

on|off

on を指定すると、メイン画面が再描画されないようになります。off を指定すると、on を指定して以降、再描画が停止されていたすべてのコントロールを再描画します。これにより、個々のコントロールをその都度、再描画するのではなく、コントロールのグループを同時に再描画できるため、ページのちらつきを目立ちにくくすることができます。個々のコントロールのちらつきは、古いコンピュータではより顕著となります。

4.9.14.10 SendMessage

HWND msg wparam lparam [user_var(return value)] [/TIMEOUT=time_in_ms]

HWND にメッセージを送信します。ユーザ変数 $x を指定した場合は、SendMessage の返り値が格納されます。msg には、メッセージの整数値を指定します。wparamlparam として文字列を送信したい場合は、"STR:a string" を使用します。

  • WM_CLOSE 16
  • WM_COMMAND 273
  • WM_USER 1024

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

文字列のパラメータを送信するには、パラメータの前に "STR:" をつけます。例えば、 "STR:Some string" のようです。

/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 の出力を確認することによって、サイズを知ることができます。SetBrandingImage は、.onInit! から呼び出された場合は動作しません。

4.9.14.13 SetDetailsView

show|hide

詳細画面を表示したり、隠したりします。ShowInstDetails によって設定されるデフォルトの設定を上書きします。

4.9.14.14 SetDetailsPrint

none|listonly|textonly|both|lastused

どのコマンドによってステータスを出力するか設定します。none は出力なしです。listonly はステータステキストをリストボックスに追加し、textonly はステータスバーにステータステキストを出力します。both は両方に出力します(デフォルト)。小さなファイルを大量に抽出する場合、textonly を推奨します(特に、滑らかなスクロールが有効になっている win9x)。

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_* 定数は、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 にあります。

言語ファイルをロードすると、言語 ID として ${LANG_langfile} が定義されます(例: ${LANG_ENGLISH}は1033)。これを、LangStringLicenseLangString、LangDLL、VIAddVersionKey で使用します。

4.9.15.2 LangString

name language_id string

多言語文字列を定義します。言語ごとに値が異なる文字列を定義するために利用します。スクリプトに大量の分岐を追加する必要なく、簡単にインストーラを多言語化することができます。

それぞれの文字列は、文字列を識別するための名前 name を持ち、インストーラでは各言語に対応する値が使用されます。スクリプト内における実行時の文字列でも使用することができます。言語文字列は、挿入したい場所で $(言語文字列の名前) と記述するだけで使用できます。

注意点:

  • 波括弧 {} を使用する define とは異なり、言語文字列は丸括弧 () を使用します。
  • .onInit 関数で言語を変更した場合でも、.onInit 内の言語文字列はユーザの Windows のデフォルト言語のままであるという点に注意してください。言語は、 .onInit の後で初期化されるためです。
  • スクリプトにおいては、常に、すべての言語に対して言語文字列を設定してください。
  • 言語 ID を 0 に設定した場合、LangString や LoadLanguageFile で最後に使用された言語が使用されます。

使い方の例:

 LangString message ${LANG_ENGLISH} "英語のメッセージ"
 LangString message ${LANG_FRENCH} "フランス語のメッセージ"
 LangString message ${LANG_KOREAN} "韓国語のメッセージ"

 MessageBox MB_OK "翻訳されたメッセージ: $(message)"

4.9.15.3 LicenseLangString

name language_id license_path

LangString と同様に振る舞いますが、LicenseLangString はテキスト/RTF ファイルから文字列を読み込み、LicenseData でだけ利用できる特殊な言語文字列を定義します。

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 は多言語を完全サポートしています。ひとつのインストーラのインターフェースで多言語をサポートすることができます。

デフォルトのインターフェーステキストや言語のプロパティをロードするには、各言語に対する LoadLanguageFile を使用してください。

デフォルトのインターフェーステキストは、ComponentText などの命令を利用することで、簡単に変更することができます。

また、スクリプト内で標準の言語文字列を使用することも可能です(例えば、$(^Name)はインストーラの名前を保持し、Name 命令で設定されます)。標準の言語文字列の一覧は、言語ファイルの文字列の上にあるコメントに記述されています。言語ファイルは、Contrib\Language Files にあります。

独自の言語文字列を作成するためには、LangString を利用します。

多言語インストーラの例については、languages.nsi を参照してください。

4.10.1 言語の選択

インストーラの開始時において、インターフェース言語を選択するために、以下のようなステップが実行されます。

  1. ユーザのデフォルトの Windows UI 言語を取得する
  2. その言語の完全一致を探索する
  3. 完全一致しない場合は、一次言語(primary language)が一致するものを探索する
  4. 一致しない場合、スクリプトで定義された第一言語を使用する(第一言語は英語など一般的なものであるか確認しておくこと)
  5. .onInit で言語変数 $LANGUAGE が変更された場合、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 ファイルで提供される機能を利用することによって拡張することが可能です。プラグイン DLL に関する一番の例は、おそらく、NSIS にバンドルされている InstallOptions.dll です。

NSIS コンパイラが開始されると、プラグインディレクトリから DLL を探索し、見つかったプラグインとエクスポート関数のリストを作成します。コンパイル中は、予約語が記述されるべき位置において、「fred::flintstone」のような文字列に遭遇すると、コンパイラはそのリストを調べます。fred.dll が flintstone という関数をエクスポートしていれば、NSIS は fred.dll ファイルを作成されたインストーラのバイナリに追加します。

プラグインコマンドの実行中は、NSIS は必要な DLL を一時フォルダ($PLUGINSDIR)に展開し、指定されたすべての引数を Push してから(右から左の順)、DLL 関数を実行します。

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

プラグインの呼び出しは次のようです。

InstallOptions::dialog "ini_file_location.ini"

すべての引数はスタックに Push されます(この例では、プラグイン関数の引数は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 を参照してください。

サイレントインストーラにおいては、ディレクトリページを表示することができないため、コマンドラインでインストールディレクトリを指定するためのオプションがあります(このオプションはサイレントでないインストーラ/アンインストーラでも動作します)。以下の例のように、 /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

より多くの情報を必要とするインストーラ/アンインストーラをサイレントにしたい場合は、答えファイル(アンサーファイル)へのパスを渡せるようにするべきです。これにより、コマンドラインにすべての情報を記述するよりも、はるかに使いやすいものとなります。

前へ | 目次 | 次へ


SourceForge Logo

« 3. Command Line Usage - NSIS Users Manual | トップページ | 5. Compile Time Command - NSIS Users Manual »

技術文書」カテゴリの記事