Previous | Contents | Next
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 節を見て下さい。
すべての変数はグローバルで、セクションや関数において使われえます。 デフォルトで、変数が1024文字に制限されることに注意してください。 この制限を拡げるには、NSIS_MAX_STRLENビルド設定をより大きな値にしてNSISをビルドするか、またはスペシャルビルドを使って下さい。
$VARNAME
ユーザー変数は 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
$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9
レジスター。これらの変数はちょうどユーザー変数のように使う事ができますが、普通は共有された関数やマクロにおいて使われます。これらの変数を宣言する必要はないので、共有されたコード中でこれらを使う時に少しも名前が衝突しません。共有されたコード中でこれらの変数を使っている時には、それらのオリジナルな値を保存し復元するために、スタックを使用する事が推奨されます。これらの変数はまた、プラグインとのコミュニケーションのために使われえます。なぜなら、これらはプラグインのDLLによって読んだり書いたりされる事ができるからです。
$INSTDIR
インストールディレクトリー($INSTDIR は StrCpy、ReadRegStr、ReadINIStr などを用いて変更可能です。- 例えば、これはインストール場所のより高度な探知を行う為に .onInit 関数で使われるでしょう。)。
アンインストーラーコード中では、$INSTDIR はアンインストーラーが存在するディレクトリーが入っている事に注意して下さい。インストーラー中で持っているのと同じ値を持つ必要はありません。例えば、もしアンインストーラーを $WINDIR に書いてユーザーがそれを移動しないなら、$INSTDIR はアンインストーラーで $WINDIR でしょう。もしアンインストーラーを別の場所に書くなら、インストーラーの $INSTDIR をレジストリー中か代わりの保存方法に保持して、それをアンインストーラーで読むべきです。
$OUTDIR
現在の出力ディレクトリー(SetOutPath 経由で暗黙に、あるいは StrCpy、ReadRegStr、ReadINIStr など経由で明示的に設定する)。
$CMDLINE
インストーラーのコマンドライン。コマンドラインの書式は以下のうちの1つであり得ます:
$LANGUAGE
現在使用されている言語の識別子。例えば、英語は 1033。この変数を .onInit で変更できます。
定数は 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:\Windows
か C:\WinNT
だけれど、実行時に検出されます)。
$SYSDIR
Windows システム ディレクトリー(普通は C:\Windows\System
か C:\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ファイル、スプラッシュプラグインのためのビットマップ、またはプラグインが働くために必要な他のどのようなファイルを保持するのにも、理想的なものにします。
$$
$ を表示するのに使います。
$\r
キャリッジリターン (\r) を表示するのに使います。
$\n
改行 (\n) を表示するのに使います。
$\t
タブ (\t) を表示するのに使います。
ラベルは、Goto命令または(IfErrors、MessageBox、IfFileExists、StrCmpといった)様々な分岐命令のターゲットです。ラベルはセクションか関数内になければなりません。ラベルはスコープ中で、それらが在るセクションか関数内からだけ使用可能である事を意味している、ローカルです。ラベルを定義するには、単に以下を使って下さい:
MyLabel:
ラベルは -, +, !, $, 0-9 で始める事はできません。ラベルを必要とする様々な命令のためのラベルを指定している時には、空の文字列("")と 0 の両方が(Gotoがまったく生じないこと意味している)次の命令を表していることを覚えておいて下さい。ピリオド(.)で始まっているラベルは、(インストーラーからアンインストール グローバルラベルに跳ぶことはできない、逆もまた同様、だけれども)どの関数やセクションからでもそれらにジャンプすることができる事を意味している、グローバルです。
ラベルと違って 相対的なジャンプは、名前が示唆するように、それらが呼ばれる場所に関連します。ラベルを使うことができる場所ならどこででも相対的なジャンプを使うことができます。相対的なジャンプは数によって表されます。+1は次の命令にジャンプ(デフォルト進行)し、+2は命令を1つスキップして現在の命令から2番目の命令に行き、-2は後ろに命令を2つジャンプし、+10は、現在の命令から10番目の命令にジャンプして命令を9つスキップします。
インストーラーが動いている時、命令は実行時に実行されるすべてのコマンドです。MessageBox、Goto、GetDLLVersion、FileRead、SetShellVarContextは、すべて命令です。AddSize、Section、SectionGroup、SectionEnd、SetOverwrite(とコンパイラーフラグの下のすべて)、Name、SetFont、LangStringはコンパイル時に実行されるので、これらは命令ではありません。
例:
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
個々の(非サイレント)NSISインストーラは、ページのセットを持っています。個々のページは、NSISビルトインページか(例えば nsDialogs や InstallOptions で)ユーザーの関数によって作成されたカスタムページであるでしょう。
スクリプトを使ってページの順序、外観、動作をコントロールできます。ページをスキップする、ページを白く塗る、一定の条件までユーザーをあるページに留まらせる、readmeページを見せる、入力の為のカスタムデザインページを見せる、あるいはもっと多くの事もできます。このセクションでは、上記のすべてをどのようにコントロールするかを学びます。
ページについて 2つの基本的なコマンド、Page と UninstPage があります。1番目はページをインストーラーに追加し、2番目はページをアンインストーラーに追加します。これら2つに加えて、どれかにページとより大量のオプションを追加することを可能にするPageExコマンドがあります。PageExは、デフォルトを使う代わりに追加している具体的なページにオプションをセットすることを可能にし、それはPageExの外で設定されます。
ページの順序は、単にスクリプト中のPage、UninstPage、PageExの出現順序により設定されます。例えば:
Page license Page components Page directory Page instfiles UninstPage uninstConfirm UninstPage instfiles
このコードはNSISに、最初にライセンスページ、その次にコンポーネント選択ページ、その次にディレクトリ選択ページ、最後に、ちょうど古いインストーラーにおけるように、セクションが実行されたインストールログを見せる事を教えます。アンインストーラーは、最初にアンインストール確認ページと、その次にアンインストールログを見せます。
何回も同じページタイプを指定できます。
古いNSISスクリプトとの後方互換性のために、もしインストーラページコマンドが全く使われないなら、以下のインストーラページが追加されます:(もしLicenseText と LicenseDataが指定されると)ライセンス、(もしComponentTextが指定されて1つ以上の目に見えるセクションが在れば)コンポーネント、(もしDirTextが指定されると)ディレクトリー、instfiles。アンインストーラページコマンドが全然ない時には、以下のアンインストーラページが追加されます:(もしUninstallTextが指定されると)アンインストール確認ページとinstfiles。この方法は使用を避ける事が望まれており、新しい標準の言語文字列を使うことができるので、スクリプトをページコマンドを使うように変換する事が大いに推奨されます。
各々のページは、それがどのように見えて作動するかを定義する、そのユニークなデータのセットを持っています。 このセクションは、それぞれのタイプのページがどんなデータを使うかそれをどのように設定できるかを述べています。コールバック関数は下で説明されて、このセクション中では扱われません。
下のリストは、コマンドが決まったページタイプにどう作用するかを一覧表にしています。さもなければ言及されない限り、これらのコマンドはPageExブロックの中と外の両方で使用できます。もしPageExブロックの内側で使用されると、それらはPageExで設定されている現在のページだけに作用し、でなければそれらは他のすべてのページでデフォルトを設定します。
ライセンス ページ
コンポーネント選択 ページ
ディレクトリー選択 ページ
アン/インストール ログ ページ
アンインストール確認 ページ
ページキャプションを設定するには Caption を使って下さい。
各々のビルトインページは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
custom [creator_function] [leave_function] [caption] [/ENABLECANCEL] あるいは internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]
インストーラーページを追加します。ビルトインかカスタムページについてとコールバック関数についての詳細に関しては上記のセクションを見てください。
internal_page_type は以下であり得ます:
インストーラーの最後のページは、混乱を防ぐためにそのキャンセルボタンを無効にされています。どうしても有効にするなら、/ENABLECANCEL を使って下さい。
custom [creator_function] [leave_function] [caption] [/ENABLECANCEL] あるいは internal_page_type [pre_function] [show_function] [leave_function] [/ENABLECANCEL]
アンインストーラーページを追加します。ビルトインかカスタムページについてとコールバック関数についての詳細に関しては上記のセクションを見てください。
internal_page_typeのあり得る値に関しては Page を見てください。
[un.](custom|uninstConfirm|license|components|directory|instfiles)
インストーラーページか、もし un. プリフィックスが使用されるとアンインストーラーページを追加します。すべてのPageExは、対になっている PageExEnd を持っていなければなりません。PageExブロック中で、このページに特有で、他のページで使用されないオプションをセットできます。設定されていないオプションは、PageExブロックの外で設定されたものになるか、もし何も設定されなかったならデフォルトに戻ります。ページのためのサブキャプションを設定するには、デフォルトをセットするのに Caption か SubCaption を使用して下さい。PageExでページセットの為のコールバック関数を設定するには、PageCallbacks を使用して下さい。ビルトインかカスタムページについての詳細に関しては上記のセクションを見てください。
Example usage:
PageEx license LicenseText "Readme" LicenseData readme.rtf PageExEnd PageEx license LicenseData license.txt LicenseForceSelection checkbox PageExEnd
PageEx ブロックを終わらせます。
([creator_function] [leave_function]) | ([pre_function] [show_function] [leave_function])
PageEx を使って定義されたページのためのコールバック関数をセットします。PageEx ブロックの中でだけ使用され得ます。コールバック関数についての詳細に関しては上記のセクションを見てください。
PageEx license PageCallbacks licensePre licenseShow licenseLeave PageExEnd
各 NSIS インストーラーが1つ以上のセクションを含んでいます。これらのセクションのそれぞれが、 以下のコマンドで作成、変更、終了されます。
size_kb
カレント セクションは追加の "size_kb" キロバイトのディスク容量を必要とする事を インストーラーに教えます。セクションの内側だけで有効です(セクションの外側や関数中では まったく影響しません)。
Section AddSize 500 SectionEnd
[/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
このコマンドは 現在開いているセクションを閉じます。
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
[/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
SectionGroup で開かれたセクション グループを閉じます。
アンインストーラーを生成する為に 'Uninstall' と名付けられた特別なセクションが 作成され なければなりません。このセクションは、インストーラーによってインストールされた すべての ファイル、レジストリーキーなどなどを システムから削除すべきです。これは、シンプルな アンインストール セクションの例です:
Section "Uninstall" Delete $INSTDIR\Uninst.exe ; 自身を消去する(なぜこれが働くのか下の説明を見て下さい) Delete $INSTDIR\myApp.exe RMDir $INSTDIR DeleteRegKey HKLM SOFTWARE\myApp SectionEnd
最初の(アンインストーラーを消去している)Delete 命令は 働きます。なぜなら アンインストーラーは、アンインストールの為にシステムのテンポラリー ディレクトリーに透過的にコピーされているからです。
アンインストーラー コード中では $INSTDIR にはアンインストーラーがあるディレクトリーが 入っている事に注意して下さい。インストーラーで入っているのと同じ値が入っている必要は ありません。
関数はセクションと似ていて、0 個以上の命令を含んでいます。ユーザー関数はインストーラーによって 直接には呼ばれず、代わりにセクションから Call 命令を使って呼ばれます。コールバック関数は 決まったイベントが起こった時にインストーラーによって呼ばれます。
関数は セクションや他の関数の外側で宣言されなければなりません。
[function_name]
新しい関数を開始します。"." で始まっている関数名(例えば ".なんでも") は、コールバック関数の為に全般的に予約されています。"un." で始まっている関数名は、 アンインストーラー中で生成される関数です。ゆえに、普通のインストール セクションと関数は アンインストール関数を呼ぶ事ができず、アンインストール セクションとアンインストール関数は 普通の関数を呼ぶ事ができません。
Function func # いくつかのコマンド FunctionEnd Section Call func SectionEnd
このコマンドは 現在開いている関数を閉じます。
インストール中に決まったポイントでインストーラーにより呼ばれる 特別な名前を持っている コールバック関数を作成する事ができます。以下は、現在利用可能なコールバックのリストです:
このコールバックは、最初のページがロードされインストーラー ダイアログが表示される 直前に 呼ばれ、ユーザー インターフェースの微調整を可能にしています。
例:
!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
このコールバックは、インストーラーが初期化をほぼ終えた時に呼ばれます。もし '.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
このコールバックは、インストールが失敗した(ファイルを展開できなかったり、インストール スクリプトが Abort コマンドを使った)後 ユーザーが キャンセル ボタンをクリックした時に 呼ばれます。
例:
Function .onInstFailed MessageBox MB_OK "Better luck next time." FunctionEnd
このコールバックは、インストールが成功し、インストール ウィンドウが閉じる直前(もし AutoCloseWindow や SetAutoClose が false にセットされていると ユーザーが 閉じるをクリックした後かもしれない)に 呼ばれます。
例:
Function .onInstSuccess MessageBox MB_YESNO "Congrats, it worked. View readme?" IDNO NoReadme Exec notepad.exe ; readme を見る。あるいは、お望みの事を何でも。 NoReadme: FunctionEnd
このコールバックは、インストーラー ウィンドウが閉じた直後に 呼ばれます。もし必要なら プラグインに関連したユーザー インターフェースを解放するのに使って下さい。
このコールバックは、セクション ツリー上でマウス位置が変わった時にはいつでも 呼ばれます。 例えば 各セクションの為の説明をセットする事を可能にします。マウスが上に乗っている セクション 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
このコールバックは もし Reboot が失敗すると 呼ばれます。 WriteUninstaller, plug-ins, File, WriteRegBin はこのコールバック中で使用されるべきでは ありません。
例:
Function .onRebootFailed MessageBox MB_OK|MB_ICONSTOP "Reboot failed. Please reboot manually." /SD IDOK FunctionEnd
component page において選択が変更されると 呼ばれます。 SectionSetFlags と SectionGetFlags と共に使うために役立ちます。
選択の変更は、セクション選択とインストール タイプ変更の両方を含みます。
このコールバックは、ユーザーがキャンセルをクリックして インストールがまだ失敗していない時に 呼ばれます。もしこの関数が Abort を呼ぶと、インストールは 中止されません。
例:
Function .onUserAbort MessageBox MB_YESNO "Abort install?" IDYES NoCancelAbort Abort ; インストーラーを終了させない NoCancelAbort: FunctionEnd
このコールバックは、インストールパスがインストーラーの為に妥当かどうかをコントロールする事を 可能にします。このコードは ユーザーがインストール ディレクトリーを変更すると毎回呼ばれるので、 MessageBox や似たようなもので馬鹿な事を何もすべきでは ありません。もしこの関数が Abort を呼ぶと、$INSTDIR 中の インストールパスは 無効であると考えられます。
例:
Function .onVerifyInstDir IfFileExists $INSTDIR\Winamp.exe PathGood Abort ; もし $INSTDIR が winamp ディレクトリーでないなら、そこにインストールしない PathGood: FunctionEnd
このコールバックは、最初のページがロードされインストーラー ダイアログが表示される 直前に 呼ばれ、ユーザー インターフェースの微調整を可能にしています。
例に関しては .onGUIInit を見て下さい。
このコールバックは、アンインストーラーが初期化をほぼ終えた時に呼ばれます。もし '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
このコールバックは、アンインストールが失敗した(Abort commandを使ったか さもなければ 失敗した)後 ユーザーがキャンセル ボタンをクリックした 時に 呼ばれます。
例:
Function un.onUninstFailed MessageBox MB_OK "Better luck next time." FunctionEnd
このコールバックは、アンインストールが成功し、インストール ウィンドウが閉じる直前(もし SetAutoClose が false にセットされていると ユーザーが 閉じるをクリックした後かもしれない)に 呼ばれます。
例:
Function un.onUninstSuccess MessageBox MB_OK "Congrats, it's gone." FunctionEnd
このコールバックは、アンインストーラー ウィンドウが閉じた直後に 呼ばれます。もし必要なら プラグインに関連したユーザー インターフェースを解放するのに使って下さい。
このコールバックは もし Reboot が失敗すると 呼ばれます。 WriteUninstaller, plug-ins, File, WriteRegBin はこのコールバック中で使用されるべきでは ありません。
例:
Function un.onRebootFailed MessageBox MB_OK|MB_ICONSTOP "Reboot failed. Please reboot manually." /SD IDOK FunctionEnd
component page において選択が変更されると 呼ばれます。 SectionSetFlags と SectionGetFlags と共に使うために役立ちます。
選択の変更は、セクション選択とインストール タイプ変更の両方を含みます。
このコールバックは、ユーザーがキャンセル ボタンをクリックして アンインストールがまだ失敗 していない時に 呼ばれます。もしこの関数が Abort を呼ぶと、アンインストールは中止されません。
例:
Function un.onUserAbort MessageBox MB_YESNO "Abort uninstall?" IDYES NoCancelAbort Abort ; アンインストーラーを終了させない NoCancelAbort: FunctionEnd
以下のコマンドはすべて インストーラーの属性を調整します。これらの属性は、インストーラー中に どのページが存在するかを含めて、各ページの各部分でどんなテキストが表示されるか、インストーラーが どのように名付けられるか、インストーラーがどんなアイコンを使うか、デフォルト インストール ディレクトリー、どんなファイルを書き出すか などのように、インストーラーがどのように見えて 機能するかを コントロールします。これらの属性は セクションと関数中を除いて ファイル中の どこででも設定できる事に注意して下さい。
デフォルトは太字で下線付きです
(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
true|false
ドライブのルートディレクトリーやネットワーク共有の中に直接 インストールが可能にされるかどうかを 制御します。 ユーザーがインストール (後のアンインストール) ディレクトリーとして C:\ や \\Server\Share を選択できない安全な振舞いを、変更するには 'true' にセットして下さい。 ディレクトリー選択ページのさらなるカスタマイズ能力に関しては、.onVerifyInstDir を見て下さい。
true|false
完了した時 インストール ウィンドウが自動的に閉じるかどうかを セットします。 これは、セクションから SetAutoClose を使ってオーバーライド可能です。
[font_face [height [weight] [/ITALIC] [/UNDERLINE] [/STRIKE]]]
バックグラウンド グラディエントにテキストを表示するのに使用されるフォントを 指定します。 色を設定するには、BGGradient を使用して下さい。 パラメーターが指定されないと、デフォルト フォントが使用されます。 デフォルト フォントは太字でイタリック体のタイムズ・ニュー・ローマンです。
[off|(topc botc [textcolor|notext])]
グラディエント バックグラウンド ウィンドウを使用するかどうかを 指定します。 もし 'off' なら、インストーラーはバックグラウンド ウィンドウを表示しません。 パラメーターが指定されないと、デフォルトの黒から青へのグラディエントが使用されます。 さもなければ、グラディエントを作るのに top_color や bottom_color が使用されます。 top_color と bottom_color は、(HTML 中でのように、16 進数で、# がコメントの為に使用され得るので 先導する '#' だけを引いて) RRGGBB の形を使用することで指定されます。 'textcolor' が同様に指定でき、あるいは 大きな背景テキストを消すには 'notext' を指定できます。
/TRIM(LEFT|RIGHT|CENTER) text
インストール ウィンドウの下部に表示されるテキスト(デフォルトで、それは 'Nullsoft Install System vX.XX' )を セットします。 これを空の文字列 ("") にセットすると、デフォルトを使用します。文字列を空白にセットするには、(" ") (スペース)を使って下さい。 もし問題なければ、なぜインストーラーがひどくないのかを 皆が知る事ができるように、デフォルトのままにして下さい。えっ。 コントロールのサイズを文字列のサイズに減らすには /TRIMLEFT、/TRIMRIGHT、/TRIMCENTER を使用して下さい。
変数を受け入れます。 もし変数が使用されるなら、.onInit でそれらを初期化しなければなりません。
caption
PageEx ブロックの外で使用される時: インストーラーのタイトルバーのテキストを セットします。デフォルトでは それは 'Name Setup' で、 ここで Name は Name 命令で指定されます。けれど、それを 'MyApp Installer' や何ででも オーバーライドできます。もし空の文字列 ("") を指定すると、 デフォルトが使用されます(文字列無しにするには " "(スペース)を指定できます)。
PageEx ブロック内で使用される時: カレントページのサブ キャプションを セットします。
変数を受け入れます。 もし変数が使用されるなら、.onInit でそれらを初期化しなければなりません。
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"
bitmap.bmp
コンポーネントの選択ページのツリー ビューのチェックに使用されるイメージを持つ ビットマップを指定します。
このビットマップは、96x16 ピクセルのサイズを持ち、8bpp(256 色)より多くなく、異なった状態 (順に: selection mask, not checked, checked, greyed out, unchecked & read-only, checked & read-only)のための6つの 16x16 画像を 含んでいなければなりません。 マスクカラーとして マジェンタを使って下さい(この領域は透明になります)。
text
もしパラメーターが指定されるとインストールの終わりに表示される、デフォルト テキスト ("完了")を置き換えます。さもなければ、デフォルトが使用されます。
変数を受け入れます。もし変数が使用されるなら、メッセージが表示される前に 初期化されなければなりません。
[text [subtext] [subtext2]]
コンポーネント ページ上のデフォルト テキストを変更するのに 使用されます。
text: インストール アイコンの右、コントロール上のテキスト。
subtext: インストール タイプ選択の横のテキスト。
subtext2: コンポーネント リスト左、インストール タイプ下のテキスト。
もし文字列が空("")なら、デフォルト文字列が使用されます。
変数を受け入れます。もし変数が使用されるなら、コンポーネント ページが作成される前に 初期化されなければなりません。
on|off|force
インストールを可能にする前に インストーラーが自身の CRC チェックを行うかどうかを 指定します。 もし、ユーザーがインストーラーを実行している時に コマンドラインで /NCRC を使って、あなたが 'force' を指定していなかったならば、ユーザーは(潜在的に)途切れたインストーラーを インストールする事を 許されます。
show details text
もしパラメーターが指定されると、"Show details" 詳細ボタンのデフォルトのテキストを 置き換えます(さもなければ デフォルトが使用されます)。
変数を受け入れます。もし変数が使用されるなら、インストール ログ(instfiles)ページが 作成される前に 初期化されなければなりません。
[text] [subtext] [browse_button_text] [browse_dlg_text]
ディレクトリー ページ上のデフォルト テキストを変更するのに 使用されます。
text: インストール アイコンの右、コントロール上のテキスト。
subtext: ディレクトリー選択フレーム上の テキスト。
browse_button_text: 参照ボタン上の テキスト。
browse_dlg_text: "参照" ボタンをクリックした後に現れる "フォルダ参照" ダイアログ上の テキスト。
もし文字列が空("")なら、デフォルト文字列が使用されます。
変数を受け入れます。もし変数が使用されるなら、ディレクトリー ページが作成される前に 初期化されなければなりません。
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
auto|leave
`DirVerify leave' が使用されると、インストールディレクトリーが正しくなかったり 十分なスペースが存在しなくても 次へ ボタンは無効にされません。 GetInstDirError を使って leave 関数中で読む事のできるフラグが 代わりにセットされます。
PageEx directory DirVerify leave PageCallbacks "" "" dirLeave PageExEnd
file error text
ファイルが書き込めなかった時に出て来るデフォルトテキストを 置き換えます。 この文字列は、ファイル名である $0 への参照を含む事ができます($0 は一時的にこの値に変更されます)。 Example: "Can not write to file $\r$\n$0$\r$\ngood luck, bitch.".
変数を受け入れます。もし変数が使用されるなら、File が使用される前に 初期化されなければなりません。
[path\]icon.ico
インストーラーのアイコンを 設定します。 アイコンファイル中のあらゆるアイコンが インストーラーに含まれます。 アンインストーラーアイコンを設定するには UninstallIcon を使用して下さい。
install button text
もしパラメーターが指定されると、("Install" の)デフォルトのインストール ボタン テキストを 指定されたテキストで置き換えます。
変数を受け入れます。もし変数が使用されるなら、インストール ボタンが表示される前に 初期化されなければなりません。
/windows | (foreground_color background_color)
インストール情報画面の為に使用する色を設定します (デフォルトは 00FF00 000000 です)。 (HTML 中でのように、16 進数で、# がコメントの為に使用され得るので 先導する '#' だけを引いて) RRGGBB の形を使用して下さい。 もし "/windows" が唯一のパラメーターとして指定されると デフォルトの Windows 色が使用される事に注意して下さい。
definstdir
デフォルト インストール ディレクトリーをセットします。 この文字列を作るのに使用され得る変数(特に $PROGRAMFILES)に関しては 変数 セクション を見て下さい。 もしユーザーが '参照' を選択すると 最後に \ を続けたこの文字列の部分が使用されて、 インストール時には文字列に追加されて戻っているかもしれない(これを無効にするには、 ディレクトリーを(パラメーター全体が引用符で閉じられている必要がある)\ で終わる)事に 注意して下さい。もしこれの意味が分からないなら、少し参照ボタンと戯れて下さい。
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
[flag [...]]
flag のための正しい値は、"smooth"(プログレスバーをスムーズにする)か "colored"(プログレスバーを InstallColors でセットされた色で着色する)です。 Examples: "InstProgressFlags" (デフォルトの古い学校の Windows の外見), "InstProgressFlags smooth" (新しいスムーズな外見), "InstProgressFlags smooth colored" (色つきのスムーズな外見 ウィー). 注意: モダンテーマの Windows XP 上でインストーラーが実行している時には、"smooth" と "colored" のどちらも XPStyle on では 働きません。
install_type_name | /NOCUSTOM | /CUSTOMSTRING=str | /COMPONENTSONLYONCUSTOM
インストール タイプ リストにインストール タイプを追加したり、カスタム インストール タイプを 無効にします。それぞれがインストール タイプの名前を指定して 32 タイプまで存在する事が できます。もし名前が 'un.' のプリフィックスを付けられていると、それはアンインストーラー インストール タイプです。名前は、コンポーネント ページが表示される前に実行時に処理される 変数を含む事ができます。実行中に InstType の名前を変更する別のやり方は、 InstTypeSetText コマンドです。違いは、 InstTypeSetText であなたの貴重なユーザー変数を保存 していることです。最初のタイプがデフォルト(一般的に 'Typical'('標準'))です。もし /NOCUSTOM スイッチが指定されると、"custom" インストール タイプが無効にされ ユーザーは予め定義されたインストール タイプのうちの1つを選ばなければなりません。あるいはまた、 もし /CUSTOMSTRING スイッチが指定されると、パラメーターは "Custom" インストール タイプ テキストをオーバーライドします。あるいはまた、もし /COMPONENTSONLYONCUSTOM フラグが指定されると、コンポーネント リストは "Custom" インストール タイプが選択 された場合にだけ 表示されます。
タイプ名の為に変数を受け入れます。もし変数が使用されると、コンポーネント ページが作成 される前に 初期化されなければなりません。
color | /gray | /windows
ライセンスデータの背景色を 設定します。 color は、(HTML 中でのように、16 進数で、# がコメントの為に使用され得るので 先導する '#' だけを引いて) RRGGBB の形を使用することで指定されます。 デフォルトは '/gray' です。 また、'/windows' を使用することによって Windows OS 定義色を使用できます。
licdata.(txt|rtf)
ユーザーが読む事のできるライセンスの為に使用する テキスト ファイルか RTF ファイルを指定します。 ライセンスを表示させないなら これを省略して下さい。 ファイルは邪悪な DOS テキスト フォーマット (\r\n, yeah!) でなければならない事に注意して下さい。 多言語ライセンス データを定義するには、LicenseLangString を 使用して下さい。
もしライセンス ファイルを RTF ファイルで作るなら、MS Word ではなく ワードパッドで編集するのが推奨されます。 ワードパッドを使用する事で ずっと小さなファイルになります。
あらゆる言語で異なったライセンスを表示するには LicenseLangString を使って下さい。
(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
[text [button_text]]
ライセンス ページでのデフォルト テキストを変更するのに使用します。
text: インストール アイコンの右、コントロール上のテキスト。
button_text: "I Agree" ボタン上のテキスト。
もし文字列が空("")なら、デフォルト文字列が使用されます。
変数を受け入れます。 もし変数が使用されるなら、ライセンス ページが作成される前に 初期化されなければなりません。
[back button text [next button text] [cancel button text] [close button text]]
4つのボタン(< 戻る、次へ >、キャンセル、閉じる)のためのデフォルト テキスト文字列を 置き換えます。もしパラメーターが省略されると、デフォルトが使用されます。
変数を受け入れます。もし変数が使用されるなら、.onInit 中で 初期化されなければなりません。
name [name_doubled_ampersands]
インストーラーの名前をセットします。 名前は普通シンプルに、'MyApp' や 'CrapSoft MyApp' といったプロダクト名です。 もし名前中に 1 つ以上のアンパサンド(&)を持っているなら、2 番目のパラメーターを アンパサンドだけを二重にした同じ名前にセットして下さい。 例えば もしプロダクト名が "Foo & Bar" なら、これを使って下さい:
Name "Foo & Bar" "Foo && Bar"
もし名前中にアンパサンドを持っていて 名前の為に LangString を 使用するなら、2 番目のパラメーターとして使用するのに 二重アンパサンドを持つ別のものを作成しなければなりません。
変数を受け入れます。 もし変数が使用されるなら、.onInit で 初期化されなければなりません。
[path\]install.exe
MakeNSIS がインストーラーをそこに書くべきである 出力ファイルを指定します。 これは単に MakeNSIS が書くファイルであり、インストーラーの内容には影響を及ぼしません。
none|user|highest|admin
Windows Vista の為に求められる実行レベルを指定します。値は インストーラーとアンインストーラーの XML manifest 中に埋め込まれて、Vista とおそらく将来のバージョンの Windows に インストーラーが どの特権レベルを必要とするかを知らせます。 user は管理者特権無しの普通のユーザーレベルを要求します。 highest は現在のユーザーで利用可能な最も高い実行レベルを要求して、Windows に 権限 昇格を検証する為にユーザーにプロンプトを出させます。プロンプトはユーザーのパスワードを 求めるかもしれません。 admin は管理者レベルを要求して、Windows に ユーザーにプロンプトを同様に出させます。 デフォルトでもある none を指定する事は、manifest を空のままにして、どの実行レベルが 求められるかを Windows に決定させます。 Windows Vista は NSIS インストーラーを自動的に認識して、管理者権限が要求されると決定します。 このため、none と admin が実質的には同じ効果を持ちます。
少なくとも Microsoft によれば、あらゆるアプリケーションが 求められる実行レベルを記されている 事が 推奨されています。記されていないインストーラーは 互換モードを必要とします。 このモードでの回避方法は、ユーザーのスタート メニューに作成されたどのショートカットも すべての ユーザーのスタート メニューへ自動的に移動される事を 含みます。 システム フォルダに何もインストールする必要が無く ローカル マシン レジストリー(HKLM)に何も 書く必要が無い インストーラーは、user 実行レベルを指定するべきです。
このトピックについての詳細は MSDN で見つかります。 キーワードは、"UAC", "requested execution level", "vista manifest", "vista security" を含みます。
[/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 があります。
hide|show|nevershow
インストールの詳細が表示されるかどうかを セットします。 デフォルトで詳細を隠すには 'hide'、あるいは ユーザーに見るのを許して デフォルトで見せるには 'show'、あるいは 決して見せない 'nevershow' にできます。 セクションがこれを SetDetailsView を使ってオーバーライドできる事に 注意して下さい。
hide|show|nevershow
アンインストールの詳細が表示されるかどうかを セットします。 デフォルトで詳細を隠すには 'hide'、あるいは ユーザーに見るのを許して デフォルトで見せるには 'show'、あるいは 決して見せない 'nevershow' にできます。 セクションがこれを SetDetailsView を使ってオーバーライドできる事に 注意して下さい。
normal|silent|silentlog
インストーラーがサイレントであるべきかどうかを指定します。もし 'silent' か 'silentlog' なら、 SF_SELECTED フラグを持つすべてのセクションが(SectionSetFlags を使ってこのフラグをセットできます)、インストーラー自体から全く画面出力無しで( スクリプトはまだ必要なものは何でも表示でき、 サイレント インストーラーの為にデフォルトを 指定するには MessageBox の /SD を使用して下さい) 黙ってインストールされます。もしこれが 'normal' にセットされ ユーザーがコマンドラインで /S (大文字小文字を区別)付きでインストーラーを実行すると、SilentInstall 'silent' が使用された かのように振る舞う事に注意して下さい。注:LogSet も 見て下さい。
詳細に関しては 4.12 節 を見て下さい。
normal|silent
アンインストーラーがサイレントであるべきかどうかを指定します。もし 'silent' か 'silentlog' なら、 アンインストーラー セクションは、アンインストーラー自体から全く画面出力無しで( スクリプトはまだ必要なものは何でも表示でき、 サイレント インストーラーの為にデフォルトを 指定するには MessageBox の /SD を使用して下さい) 黙って実行します。もしこれが 'normal' にセットされ ユーザーがコマンドラインで /S 付きで アンインストーラーを実行すると、SilentUnInstall 'silent' が使用された かのように振る舞う事に注意して下さい。注:LogSet も 見て下さい。
詳細に関しては 4.12 節 を見て下さい。
[req text [avail text]]
もしパラメーターが指定されると、必要なスペースと利用可能なスペースのテキスト (デフォルトで "Space required: " と "Space available: ")を オーバーライドします。もし必要なスペースとして 'none' が指定されると、スペースのテキストは 表示されません。
変数を受け入れます。もし変数が使用されるなら、コンポーネント ページが作成される前に 初期化されなければなりません。
[page_number subcaption]
インストーラーページそれぞれのサブキャプション (0=": License Agreement", 1=": Installation Options", 2=": Installation Directory", 3=": Installing Files", 4=": Completed") を オーバーライドします。もし空の文字列("")を指定すると デフォルトが使用されます (文字列無しにするには " "(スペース)を指定もできます)。
PageEx ブロック内で Caption を使って サブキャプションをセット(あるいは デフォルトをオーバーライド)もできます。
変数を受け入れます。もし変数が使用されるなら、関連するページが作成される前に 初期化されなければなりません。
text
アンインストーラー中でデフォルトでは "Uninstall" と言う ボタンのテキストを 変更します。もしパラメーターが指定されなければ、デフォルト テキストが使用されます。 (UninstallEXEName を置き換える)WriteUninstaller も見て下さい。
変数を受け入れます。もし変数が使用されるなら、アンインストール ボタンが表示される前に 初期化されなければなりません。
caption
アンインストーラーのタイトルバーが表示するものを セットします。デフォルトでは それは 'Name Uninstall' で、ここで Name は Name コマンドで指定されます。 けれど、それを 'MyApp uninstaller' や何ででも オーバーライドできます。もし空の文字列 ("") を指定すると、デフォルトが使用されます(文字列無しにするには " "(スペース)を指定できます)。
変数を受け入れます。もし変数が使用されるなら、un.onInit で初期化されなければなりません。
[path\]icon.ico
アンインストーラーのアイコンを セットします。
page_number subcaption
アンインストーラー ページのためのデフォルト サブキャプション (0=": Confirmation",1=": Uninstalling Files",2=": Completed") をセットします。もし空の文字列("")を指定すると デフォルトが使用されます (文字列無しにするには " "(スペース)を指定もできます)。
PageEx ブロック内で Caption を使って サブキャプションをセット(あるいは デフォルトをオーバーライド)もできます。
変数を受け入れます。もし変数が使用されるなら、関連するページが作成される前に 初期化されなければなりません。
text [subtext]
アンインストール確認ページ上のテキストを 指定します。
text: コントロール上のテキスト。
subtext: アンインストールの場所 の横のテキスト。
変数を受け入れます。もし変数が使用されるなら、アンインストール確認ページが作成される前に 初期化されなければなりません。
on|off
インストーラーのアイコンが表示されているかどうかを セットします。
on|off
XP マニフェストがインストーラーに追加されるかどうかを セットします。 Windows XP 上で実行している時、XP マニフェストが インストーラー コントロールに新しい XP スタイルを使用させます。 これはアンインストーラーにも影響します。
以下のコマンドは、コンパイラーがどのようにコードを生成しデータを圧縮するかに 影響を及ぼします。 さもなければ 特に言及されない限り、これらのコマンドはスクリプト中のどこででも有効であり、 それが置かれた場所以降のすべての行に(別のコマンドでオーバーライドされるまで)影響を及ぼし ます。フロー制御 命令を使って飛び越す事はできません。.
例えば 以下のスクリプト中で、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}
on|off
このコマンドは、ユーザーがファイルをスキップできるべきであるかどうかを 指定します。 もし SetOverwrite が on (デフォルト) にセットされていて インストーラーがファイルを抽出しようとしている時に ファイルを書き込みの為に開けないなら、ユーザーには ファイルをスキップするオプションがあります。 もし off が使用されると ユーザーがファイルをスキップできる無視ボタンが表示されず、ユーザーには インストールを中止する (キャンセル ボタン) か または 書き込みの為にファイルを開く事を再試行する(再試行ボタン) オプションだけがあります。 もし on が使用されると ユーザーには ファイルをスキップするオプションがあります (エラー フラグがセットされます -- SetOverwrite を見て下さい)。
buffer_size_in_mb
このコマンドは、コンパイラーの内部ファイルバッファのサイズを設定します。 このコマンドで、与えられたファイルのどの位を一度にメモリー中にロードするかを 制限する事によって、コンパイラーのメモリー使用量を制御できます。 コンパイラーは入力と出力の両方が必要なので、ファイルバッファの為に与えられたあらゆる時に 指定されたメモリーサイズの 2 倍が使用されるでしょう。 このコマンドは 別の一対の MB を取り得る圧縮バッファを制限しませんし、コンパイラーの他の内部バッファも制限しませんが、通常 それらはなんとしても 1MB を上回るべきではありません。 非常に少ない数を指定すると、性能は減衰するかもしれません。 非常に大きい数を指定すると、システムリソースを使い果たし コンパイラーにコンパイル プロセスのキャンセルを強制するかもしれません。 デフォルト値は 32 MBです。
auto|force|off
このコマンドは、インストーラーによってデータが圧縮されるべきかどうかを決定するのに使用される 圧縮フラグをセットします。 例によって SetCompress フラグはそれより後のコマンドに影響を及ぼし、ファイル中の最後の SetCompress コマンドも インストーラーのセクション中と インストーラーのアンインストール データが圧縮されるかどうかを 決定します。 もし compressflag が 'auto' であるなら、圧縮されたサイズが圧縮されていないサイズよりも 小さくなるなら ファイルは圧縮されます。 もし compressflag が 'force' にセットされているなら、圧縮されたバージョンが常に使用されます。 もし compressflag が 'off' であるなら、圧縮は使用されません(より高速であり得ます)。
このオプションは ソリッド圧縮が使用される時には 全く影響を持たない事に注意して下さい。
[/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 つのブロック中に 圧縮されます。 これは より強力な圧縮比の結果となります。
dict_size_mb
LZMA コンプレッサーによって使用される メガバイト(MB)での辞書サイズをセットします (デフォルトは 8 MB)。
on|off
このコマンドは、コンパイラーに データブロック最適化をするかどうかを教えます。 データブロック最適化は、データ ブロックに追加されているデータが既にデータ ブロック中にある かどうかを見る コンパイラー チェックを持っていて、もしそうなら 追加されるのとは対照的に 単に参照されます(サイズが少しセーブされ得ます)。 このオプションを on のままにするのが強く推奨されます。
on|off
このコマンドは、インストール中に戻せるように、ファイルの最終更新日時を保存するかどうかを決定するのに File コマンドで使用されている ファイルの日付/時間保存フラグを セットします。 有効なフラグは、'on' と 'off' です。'on' がデフォルトです。
on|off|try|ifnewer|ifdiff|lastused
このコマンドは、ファイルが 存在している既存のあらゆるファイルを上書きすべきかどうかを決定するのに File コマンドで使用されている 上書きフラグを セットします。 上書きフラグが 'on' であるなら、ファイルは上書きされます (これがデフォルトです)。 上書きフラグが 'off' であるなら、既に存在しているファイルは上書きされません。 上書きフラグが 'try' であるなら、もし可能ならファイルは上書きされます (ファイルに書くことができない時に それが何のユーザー操作もなしでスキップされるという事を 意味しています)。 上書きフラグが 'ifnewer' であるなら、既存のファイルが新しいファイルより古い場合にだけ ファイルは上書きされます。 上書きフラグが 'ifdiff' であるなら、既存のファイルが新しいファイルより古いかより新しい場合にだけ ファイルは上書きされます。 'ifnewer' か 'ifdiff' モードの時には SetDateSave が何にセットされているかにかかわらず あて先ファイルの日付がセットされる事に 注意して下さい。
SetOverwrite off File program.cfg # 上書きしたくない コンフィグ ファイル SetOverwrite on
[/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"
[version_string_X.X.X.X]
ファイルのプロパティ中のバージョン タブの一番上にプロダクト バージョンを追加します。
VIProductVersion "1.2.3.4"
NSISがスクリプティングの為に使用する命令は、なんだかPHPとアセンブリの中間のようなものです。本当の高級言語構造物はありませんが、命令自体は(大部分に関しては)ハイレベルで、手ごろで便利な文字列対応力があります(すなわち、文字列の結合などについて心配する必要はありません)。本質的には25のレジスタ(20が汎用、5が特殊用途)と、スタックがあります。
[/REBOOTOK] file
ターゲットシステムから(ファイルかワイルドカードであることができるが、フルパスで指定されなければならない)fileを削除します。もし/REBOOTOKが指定されてファイルが削除できないなら、システムがリブートされる時にファイルが削除されます--もしファイルがリブートにおいて削除されるなら、リブートフラグが設定されます。もしファイルが見つかって削除できないなら、エラーフラグが設定されます。存在しないファイルを削除しようとする事でエラーフラグは設定されません。
Delete $INSTDIR\somefile.dat
command
指定されたプログラムを実行して、そしてすぐに続行します。指定されたファイルはコンパイルしているシステムではなく、ターゲットシステム上に存在しなければならない事に注意して下さい。$OUTDIRは作業ディレクトリーの為に使用されます。もしプロセスが起動できないと、エラーフラグがセットされます。もしコマンドがスペースを持つことができるなら、パラメータからそれを区切るためにそれを引用符中に入れなければならないことに注意して下さい。例えば:Exec '"$INSTDIR\command.exe" parameters'。もしそれを引用符中に置かないと、それはパラメータがあっても無くてもWindows 9x上で働きません。
Exec '"$INSTDIR\someprogram.exe"' Exec '"$INSTDIR\someprogram.exe" some parameters'
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"
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"
[/nonfatal] [/a] ([/r] [/x file|wildcard [...]] (file|wildcard) [...] | /oname=file.dat infile.dat)
現在の出力パス($OUTDIR)に展開されるべきファイルを追加します。
File /r something
)、カレントディレクトリーが再帰的に探されます。もし2つ以上
のパス セグメントが指定されると(例えば File /r something\*.*
)、最後のパス
セグメントはマッチング条件と再帰的に探す残りのディレクトリーとして使用されます。もし
ディレクトリー名が一致すると、その内容すべてが再帰的に追加されます。ディレクトリー構造は
保存されます。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 が一致します。
[/REBOOTOK] source_file dest_file
source_file を dest_file にリネームします。ファイルをシステム上のどこかから他のどこにでも 移動するのに使え、ディレクトリーを同じドライブ上の他のどこかへ移動するのに使えます。 dest_file は存在してはならず、さもなければ(/REBOOTOK を使っている場合を除いて)移動は 失敗します。もし /REBOOTOK が指定されてファイルが移動できない(例えば、デスティネーション が存在する)と、ファイルはシステムがリブートする時に移動されます。もしファイルがリブートに おいて移動されるなら、リブートフラグがセットされます。もしファイルがリネームできない(そして /REBOOTOK が使用されていない)か、もしソースファイルが存在しないと、エラーフラグがセット されます。
もし絶対パスが指定されないと、カレントフォルダが使用されます。カレントフォルダは、最後に SetOutPath 命令を使ってセットされたフォルダです。もし SetOutPath を使っていないなら、カレントフォルダは $EXEDIR です。
Rename $INSTDIR\file.ext $INSTDIR\file.dat
[/nonfatal] [/r] [/x file|wildcard [...]] file [file...]
後の使用の為にデータブロック中にファイルを保持します。
ファイルは、それらがスクリプト中に
現れる順で 圧縮されたデータブロックに追加されます。けれど 関数は、必ずしもスクリプト中に
現れる順で 呼ばれる必要はありません。従って、もし早いうちに呼ばれる関数中でファイルを追加
するけれど 関数をスクリプトの終わりに置くならば、必要なファイルを得るために 先に追加された
全てのファイルが展開されなければなりません。もしたくさんのファイルがあると、このプロセスは
長い時間がかかる可能性があります。.onInit がそんな
関数の1つです。他の何が現れるよりも前、まさに開始時に呼ばれます。もしそれをスクリプトの
本当の最後に置いて、そこでいくつかのファイルを展開して、追加されているたくさんのファイルが
あると、インストーラーはロードするのにとても長い時間をかけるでしょう。これが、NSIS に
圧縮された データブロックの終わりまで全部を探させる代わりに データブロックの最初に
ファイルをインクルードする事によって ロードプロセスをスピードアップすることを可能にする、
このコマンドが役立つ場所です。
パラメーターについての詳細に関しては、 File を見て下さい。
[/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 フォルダ全体をきれいに消去してしまいます。ユーザーはまた プログラムのファイルでない他のファイルを置く事もでき、それらがプログラムで当然消去される でしょう。インストーラーによってインストールされたファイルだけを 容易にアンインストールする 為の解決法が 利用可能です。
outpath
出力パス ($OUTDIR) をセットして、もし存在しなければ(必要なら再帰的に)作成します。 完全なパス名でなければならず、普通は $INSTDIR だけです( $INSTDIR を 手抜きして "-" で指定できます)。
SetOutPath $INSTDIR File program.exe
以下のレジストリー命令のすべてで、regedit.exe で(既定)として表示されるデフォルトキーを 指定するには キーの名前として空の文字列(間に何も入っていない2つの引用符だけ "") を使用して下さい。
もし INI 処理命令のどれかで完全なパスが指定されなければ、Windows ディレクトリーが使われます。
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
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
[/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"
root_key subkey key_name
レジストリー値を消去します。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もし値がレジストリーから削除できなかったら(あるいは まず第一に存在しなかったら)、 エラー フラグがセットされます。
DeleteRegValue HKLM "Software\My Company\My Software" "some value"
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:
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:
user_var(出力) string
string 中の環境変数を $x ユーザー変数に展開します。 もし環境変数が存在しないなら、置き換えられません。 例えば もし "%var%" を使って var が存在しないと、結果は "%var%" です。 もしエラーが存在すると、変数は空にセットされて エラー フラグがセットされます。
ExpandEnvStrings $0 "WINDIR=%WINDIR%$\nTEMP=%TEMP%"
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
user_var(出力) name
"name" 環境文字列から読んで、値を $x ユーザー変数にセットします。 もし文字列を読むのにエラーが存在すると、ユーザー変数は空にセットされて エラー フラグが セットされます。
ReadEnvStr $0 WINDIR ReadEnvStr $1 TEMP
user_var(出力) ini_filename section_name entry_name
ini_filename の [section_name] 中の entry_name から読んで、値を $x ユーザー変数にセットします。 もしエントリーが見つからないなら、エラー フラグがセットされて $x は空の文字列に決められます。
ReadINIStr $0 $INSTDIR\winamp.ini winamp outname
user_var(出力) root_key sub_key name
レジストリーから 32 ビット DWORD をユーザー変数 $x に読みます。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もし DWORD が存在しなかったら、エラー フラグがセットされて $x は空の文字列(0 である "")にセットされます。 もし値が存在するけれど DWORD ではないなら、それは文字列として読まれて エラー フラグがセット されます。
ReadRegDWORD $0 HKLM Software\NSIS VersionBuild
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"
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
root_key subkey key_name valuedata
このコマンドは、バイナリーデータのブロックをレジストリーに書きます。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 valuedata は 16 進数(例えば DEADBEEF01223211151)でです。 もしバイナリーデータがレジストリーに書けなかったら、エラー フラグがセットされます。 もしレジストリーキーが存在しないと、作成されます。
WriteRegBin HKLM "Software\My Company\My Software" "Binary Value" DEADBEEF01223211151
root_key subkey key_name value
このコマンドは、DWORD(32 ビット整数)をレジストリーに書きます(ユーザー変数が指定され得ます)。 root_key の為に有効な値は、WriteRegStr の下にリスト されています。 もし DWORD がレジストリーに書けなかったら、エラー フラグがセットされます。 もしレジストリーキーが存在しないと、作成されます。
WriteRegDWORD HKLM "Software\My Company\My Software" "DWORD Value" 0xDEADBEEF
root_key subkey key_name value
文字列をレジストリーに書きます。詳細に関しては WriteRegExpandStr を見て下さい。
WriteRegStr HKLM "Software\My Company\My Software" "String Value" "dead beef"
root_key subkey key_name value
文字列をレジストリーに書きます。root_key は以下の内の 1 つでなければなりません:
もし root_key が SHCTX か SHELL_CONTEXT であるなら、それは、 もし SetShellVarContext が all にセットされていると HKLM と、もし SetShellVarContext が current にセットされていると HKCU と 置き換えられます。
もし文字列がレジストリーに書けなかったら、エラー フラグがセットされます。 文字列の型は、WriteRegStr については REG_SZ 、WriteRegExpandStr については REG_EXPAND_SZ です。 もしレジストリーキーが存在しないと、作成されます。
WriteRegExpandStr HKLM "Software\My Company\My Software" "Expand String Value" "%WINDIR%\notepad.exe"
dllfile function_name
NSIS 拡張 DLL 、プラグイン内の function_name と名付けられた関数を呼びます。 どのように作るかに関しては example plugin を見て下さい。拡張 DLL は スタックと変数にアクセスできます。 注:自動的に展開してプラグイン DLL を呼ぶには、CallInstDLL の代わりにプラグイン コマンドを使って下さい。
Push "a parameter" Push "another parameter" CallInstDLL $INSTDIR\somedll.dll somefunction
より容易なプラグイン処理に関しては、新しい プラグイン呼び出しシンタックス を使って下さい。
[/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
path_to_create
指定されたディレクトリーを (もし必要なら再帰的に)作成します。 もしディレクトリーが作成できないと エラー フラグがセットされます。
常に 絶対パスを指定すべきです。
CreateDirectory $INSTDIR\some\directory
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"
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"
localfilename user_var(High dword 出力) user_var(Low dword 出力)
これは GetDLLVersion と同様で、インストーラーをビルドしているシステムだけに作用します(実際には2つの StrCpy コマンドにコンパイルします)。 2つの出力変数に ビルドシステム上の DLL の DLL バージョン情報をセットします。
filename user_var(High dword 出力) user_var(Low dword 出力)
"filename" の最終更新日時を得ます。成功すると ユーザー出力変数に High と Low の DWORD のタイムスタンプをセットします。失敗すると 出力は空になり エラー フラグがセットされます。
localfilename user_var(High dword 出力) user_var(Low dword 出力)
これは GetFileTime と同様で、インストーラーをビルドしているシステムだけに作用します(実際には2つの StrCpy コマンドにコンパイルします)。 2つの出力変数に ビルドシステム上のファイルのファイル タイムスタンプをセットします。
[/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 を表示します
user_var(出力) base_dir
ユーザー変数 $x に 一時ファイルの名前を 割り当てます。ファイルが作成されてしまっているので、 すぐに好きなように上書きできます。一時ファイルの名前は きっとユニークです。 もし一時ファイルが Windows temp ディレクトリーよりほかの 別の場所で作成されて欲しいなら、 base_dir を指定して下さい。それでの作業が終わったら ファイルを消去して下さい。
GetTempFileName $0 File /oname=$0 something.dat # something.dat で何かする Delete $0
user_var(出力) filename
ユーザー変数 $x に 2番目のパラメーターで指定されたファイルのフルパスを 割り当てます。 もしファイルを見つけられないと、エラー フラグがセットされて $x は空になります。 ファイルを捜そうとシステム パスを調べるには SearchPath() を使って下さい。
filename attribute1|attribute2|...
'filename' のファイル属性をセットします。 | で組み合わされ得る有効な属性は 以下のものです:
もしファイル属性がセットできない(すなわち ファイルが存在しないか あなたが正しいパーミッションを持っていない)と、エラー フラグがセットされます。 属性だけをセットできます。属性を外す事はできません。もし属性を取り除きたいなら NORMAL を使って下さい。このようにすべての属性が削除されます。このコマンドは ワイルドカードを サポートしません。
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
dllfile
指定された DLL をロードして DllUnregisterServer を呼び出します。 もしエラーが生じると(すなわち DLL をロード、OLE を初期化、エントリーポイントを発見できないか、 関数が ERROR_SUCCESS (=0) 以外の何かを返したら)、エラー フラグがセットされます。
プログラム実行の流れをコントロールする
user_message
インストールを取り消し、スクリプトの実行を停止し、ステータス表示でuser_messageを表示します。注:特別な事をするためにこれをコールバック関数から使用できます。ページコールバックもまた特殊用途のためにAbortを使います。
Abort Abort "can't install"
function_name | :label_name | user_var(入力)
function_name と名付けられた関数、label_name と名付けられたラベル、 アドレスを指定する変数、を呼びます。アドレスは、 GetCurrentAddress、GetFunctionAddress、 GetLabelAddress によって返されます。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
エラーフラグをクリアします。
ClearErrors IfErrors 0 +2 MessageBox MB_OK "this message box will never show"
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
user_var(出力) function_name
関数のアドレスを得て、それを出力ユーザー変数中に保存します。このユーザー変数はその次に、 Call や Goto に渡され得ます。もし GetFunctionAddress の出力であるアドレスに Goto すると、 呼んだ関数には決して戻ってきません(Goto された関数がリターンする時にすぐさま終了します)。
Function func DetailPrint "function" FunctionEnd Section GetFunctionAddress $0 func Call $0 SectionEnd
user_var(出力) label
ラベルのアドレスを得て、それを出力ユーザー変数中に保存します。このユーザー変数はその次に、 Call や Goto に渡され得ます。関数からアクセス可能なラベルでだけ これをコールするかも しれませんが、(潜在的に危険である)どこからでもコールできる事に注意して下さい。もし GetLabelAddress の出力を Call すると、コードはそれが(関数の終わりで明示的や暗示的に) Return する迄 実行され、Call の後の行に戻される事に注意して下さい。
label: DetailPrint "label" GetLabelAddress $0 label IntOp $0 $0 + 4 Goto $0 DetailPrint "done"
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
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
jumpto_iferror [jumpto_ifnoerror]
エラーフラグをチェックしてクリアします。そして、もしそれがセットされていれば jumpto_iferror に行き、さもなければ jumpto_ifnoerror に行きます。(使用中のファイルを削除 しようとしているといった)回復可能なエラーが発生した時には、エラーフラグが他の命令によって セットされます。
ClearErrors File file.dat IfErrors 0 +2 Call ErrorHandler
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"
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:
jump_if_silent [jump_if_not]
サイレント フラグをチェックして、もしインストーラーがサイレントなら jump_if_silent に ジャンプし、さもなければ jump_if_not にジャンプします。サイレント フラグは、 SilentInstall、 SilentUninstall、SetSilent と ユーザーがコマンドラインで /S を渡す事により セットされ得ます。
IfSilent +2 ExecWait '"$INSTDIR\nonsilentprogram.exe"'
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:
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 に行きます。符号無し整数として比較を行います。
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:
関数やセクションから戻ります。
Function func StrCmp $0 "return now" 0 +2 Return # do stuff FunctionEnd Section Call func ;"Return" will return here SectionEnd
インストーラーをできるだけ早く終了させます。Quitが呼ばれた後、インストーラーは終了します(コールバック関数は実行する機会を得ません)。
エラーフラグをセットします。
SetErrors IfErrors 0 +2 MessageBox MB_OK "this message box will always show"
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"'
str1 str2 jump_if_equal [jump_if_not_equal]
StrCmpと同じだけれど、大文字小文字を区別します。
handle
FileOpen でオープンされたファイル ハンドルをクローズします。
user_var(ハンドル出力) filename openmode
"filename" と言う名前のファイルをオープンして、ハンドル出力変数にハンドルを セットします。openmode は、"r" (リード) "w" (ライト、ファイルの すべての内容が破壊される) "a" (リードとライトの両方の為にオープンされて 内容が保持される事を意味する、アペンド)の内の1つでなければなりません。すべてのオープン モードで、ファイル ポインタはファイルの始めに置かれます。ファイルを開けない場合には、 ハンドル出力は空にセットされて エラー フラグがセットされます。
もし絶対パスが指定されていないと、カレント フォルダが使用されます。カレント フォルダは、 最後に SetOutPath 命令を使ってセットされたフォルダです。 もし SetOutPath を使っていないなら、カレント フォルダは $EXEDIR です。
FileOpen $0 $INSTDIR\file.dat r FileClose $0
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:
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:
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:
handle string
FileOpen で開かれたファイルに 文字列を書きます。 書き込み中にエラーが発生すると、エラー フラグがセットされます。
ClearErrors FileOpen $0 $INSTDIR\file.dat w IfErrors done FileWrite $0 "some text" FileClose $0 done:
handle string
'string' の整数解釈を FileOpen で開かれたファイルに 書きます。 もちろん直接 整数値を入力できます。 以下のコードは 「復帰/改行 コード」 --ファイルに Enter キー -- を書きます。
FileWriteByte file_handle "13" FileWriteByte file_handle "10"
書き込み中にエラーが発生すると、エラー フラグがセットされます。 整数の Low バイトが使用されている事に注意して下さい。 すなわち 256 を書く事は 0 を書く事と同じなどです。
handle
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:
handle user_var(ファイル名出力)
FindFirst で始められた探索を 継続します。 handle は FindFirst によって返されたハンドル出力変数であるべきです。 サーチが完了している(それ以上のファイルがない)なら、ファイル名出力が空にセットされて エラー フラグがセットされています。 ファイル名出力がパス無しである事に 注意して下さい。
[Path\]exename.exe
アンインストーラーを指定されたファイル名(とオプションでのパス)に書きます。インストール セクションか関数の内側からだけ有効で、スクリプト中にアンインストール セクションがある必要が あります。アンインストール コンフィギュレーションも見て下さい。アンインストーラーのコピーを 1回以上書き出す為に これを1回以上呼ぶ事ができます。
WriteUninstaller $INSTDIR\uninstaller.exe
user_var(エラーレベル出力)
SetErrorLevel によってセットされた最後のエラー レベルか、 もしまったく使用されていないなら -1 を 返します。
GetErrorLevel $0 IntOp $0 $0 + 1 SetErrorLevel $0
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
既に初期化済みでない場合、プラグイン ディレクトリー($PLUGINSDIR)を初期化します。
InitPluginsDir File /oname=$PLUGINSDIR\image.bmp image.bmp
何もしません。
error_level
インストーラーやアンインストーラーのエラー レベルを error_level にセットします。 詳しい情報に関しては Error Levels を見てください。
IfRebootFlag 0 +2 SetErrorLevel 4
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
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
sleeptime_in_ms
sleeptime_in_ms ミリ秒の間 インストーラーの実行を 中断します。 sleeptime_in_ms は、変数 例えば "$0" 、あるいは 数字 すなわち "666" である事ができます。
DetailPrint "sleeping..." Sleep 3000 DetailPrint "back to work"
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"
user_var(長さを出力) str
ユーザー変数 $x に str の長さを設定します。
StrLen $0 "123456" # = 6
[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
user_var(出力)
スタックの文字列をユーザー変数 $x に Pop します(意訳:ポンと出します)。もしスタックが空なら、エラーフラグがセットされます。
Push 1 Pop $1 # = 1
string
文字列をスタック上に Push します(意訳:押し込みます)。文字列はその次に スタックからポンと出される事ができます。
Push "a string"
user_var(出力) format numberstring
"format" の書式を使って "numberstring" 中の数を書式設定し、出力を ユーザー変数 $x にセットします。例の書式文字列は "%08X" "%c" を 含んでいます。
IntFmt $0 "0x%08X" 195948557 IntFmt $0 "%c" 0x41
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
コンピューターを再起動します。こいつに気を付けて下さい。もし失敗すると、 .onRebootFailed が呼ばれます。どうあろうとも、 この命令はちょうど Quit のように 決してリターンしません。
MessageBox MB_YESNO|MB_ICONQUESTION "Do you wish to reboot the system?" IDNO +2 Reboot
true|false
リブート フラグを true か false のどちらかにセットします。フラグの値は IfRebootFlag を使って読む事ができます。
SetRebootFlag true IfRebootFlag 0 +2 MessageBox MB_OK "this message box will always show"
on|off
$INSTDIR\install.log にインストール ログ記録が生じるかどうかを セットします。$INSTDIR は
この関数を呼ぶ前に値を持っていなければならず、さもないと働きません。(デフォルトではない)
これをサポートするには コンパイル時に NSIS_CONFIG_LOG ビルド設定がセットされて
いなければなりません(scons NSIS_CONFIG_LOG=yes
)。NSIS の再コンパイルについての
詳細に関しては、
Building NSIS を見て下さい。
text
もしインストーラー ログ記録が有効にされていると、ログ ファイルに "text" テキストを 挿入します。
IfFileExists $WINDIR\notepad.exe 0 +2 LogText "$$WINDIR\notepad.exe exists"
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
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
section_index section_text
セクションの為の説明を section_index にセットします。 もしテキストが "" にセットされると、セクションは隠されます。 もし範囲外のセクションが指定されると、エラー フラグがセットされます。
Section "" test_section_id SectionEnd Function .onInit # セクションの名前を $WINDIR に変える SectionSetText ${test_section_id} $WINDIR FunctionEnd
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
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
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
section_index new_size
section_index により指定されるセクションのサイズをセットします。 インデックスはゼロで始まることに注意して下さい。 サイズの値は キロバイトで入力されなければならず、数字だけをサポートしています。
Section test test_section_id SectionEnd Function .onInit # 'test' セクションの必要なサイズを 100 キロバイトにセットする SectionSetSize ${test_section_id} 100 FunctionEnd
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
inst_type_idx
現在の InstType をセットします。inst_type_idx は 0 から 31 の間でなければなりません。 もし範囲外の InstType が使用されても エラーフラグはセットされません 。
user_var
現在の InstType を得て user_var に保存します。 もし最初のインストール タイプが選択されると、user_var に 0 が置かれます。 もし 2 番目のインストール タイプが選択されると、user_var に 1 が置かれる、・・・などです。 ${NSIS_MAX_INST_TYPES} の値(デフォルトで 32)は、カスタム インストール タイプが選択された事を 意味しています。
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
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
インストーラー ウィンドウを目に見えるようにして、ウィンドウ リストのトップにそれを持って来ます。 アプリケーションが インストーラーの前面に自身を表示するように実行されていると、BringToFront は インストーラーをフォーカスの後ろに持っていきます。
Windows の最近のバージョンは、フォアグラウンド ウィンドウの設定を 制限しています。 インストールの間 ユーザーが別のアプリケーションで作業していると、ユーザーは違った方法を使って 通知されるかもしれません。
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
user_message
"user_message" 文字列を インストーラーの詳細ビューに追加します。
DetailPrint "this message will show on the installation window"
hwnd (1|0)
指定されたウィンドウやコントロールへの マウスとキーボード入力を 有効か無効にします。 可能な状態は、0 (無効)か1 (有効)です。
GetDlgItem $0 $HWNDPARENT 1 EnableWindow $0 0 Sleep 1000 EnableWindow $0 1
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"
user_var(出力) dialog item_id
指定されたダイアログボックス中の item_id で特定された コントロールのハンドルを 取得します。 内部ダイアログ上のコントロールのハンドルを得たいなら、内部ダイアログのハンドルを得るのに 最初に FindWindow user_var(出力) "#32770" "" $HWNDPARENT を使って下さい。
GetDlgItem $0 $HWNDPARENT 1 # 次へ/インストール ボタン
インストーラーを隠します。
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"
on|off
LockWindow on は、メインウィンドウが 変更によって再描画されるのを 防ぎます。 LockWindow off が使用された時、LockWindow on の為に再描画されなかったすべてのコントロールが 再描画されます。 今 一度に1つのコントロールではなくて コントロールのグループが同時にちらつくので、これは ページのちらつきをより良くします。 古いコンピュータでは 個々のコントロールのちらつきが、より目立ちます。
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
true|false
(AutoCloseWindow を使ってインストーラーの為に指定され、アンインストーラーにおいては false の)デフォルトの自動ウィンドウ-クローズ フラグをオーバーライドします。 インストール ウィンドウをインストールの完了後にすぐに消すには 'true' 、あるいは 手動クローズを要求させるには 'false' を指定して下さい。
[/IMGID=item_id_in_dialog] [/RESIZETOFIT] path_to_bitmap_file.bmp
商標イメージ画像として表示される 現在のビットマップ・ファイルをセットします。 IMGID が全く指定されないと、見つかった最初のイメージ コントロールが使用されるか、AddBrandingImage によって作成されたイメージ コントロールになります。 このビットマップがユーザーのマシンに存在していなければならない事に 注意して下さい。 画像をそこに置くには 最初に File を使用して下さい。 /RESIZETOFIT が指定されると、画像は自動的にイメージ コントロール サイズに(非常に不完全に)リサイズされます。 もし AddBrandingImage を使うと、スクリプトをコンパイルして AddBrandingImage の出力を見る事によって それがサイズを教え、 このサイズが得られます。 .onInit から呼ばれた時には SetBrandingImage は働きません!
show|hide
あなたがどちらのパラメーターを渡すかによって、詳細を表示するか 隠します。 ShowInstDetails を通してセットされる、デフォルト詳細ビューをオーバーライドします。
none|listonly|textonly|both|lastused
モードを それらの状態を表示するコマンドに セットします。 none はコマンドをサイレントにして、listonly は状態テキストをリストボックスだけに追加し、textonly は状態テキストをステータスバーだけに表示させ、both (デフォルト) は両方を有効にします。 たくさんの小さなファイルを展開するためには、(特に スムーズ スクロールが有効にされている win9x で) textonly がお勧めです。
SetDetailsPrint none File "secret file.dat" SetDetailsPrint both
hwnd [/BRANDING] [text_color] [transparent|bg_color]
スタティック・コントロール、エディット・コントロール、ボタン、ダイアログに 背景色とテキスト色を 設定します。 text_color と bg_color は変数を受け付けません。 コントロールのハンドル (HWND) を得るには GetDlgItem を使用して下さい。 コントロールを透明にするには、背景色の値として "transparent" を指定して下さい。 また、コントロールを完全にグレー(または あなたが選ぶいかなる他の色)にするのに テキスト色と背景色のあるなしにかかわらず /BRANDING を指定できます。 これはMUIでの商標イメージ テキストコントロールで使用されます。
FindWindow $0 "#32770" "" $HWNDPARENT GetDlgItem $0 $0 1006 SetCtlColors $0 0xFF0000 0x00FF00
警告: XPStlye
on
を使っている時、チェック・ボックスの背景色を "transparent" に設定するのが 適切に機能しないかもしれません。
ある Windows テーマを使用している時、背景が 透明の代わりに完全に黒いかもしれません。
silent | normal
インストーラーを サイレント モードか通常モードにセットします。 サイレント インストールについての詳細は SilentInstall を 見て下さい。.onInit でだけ 使用できます。
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}
language_file.nlf
言語テーブルの構築の為に言語ファイルをロードします。NSIS と共に配布されている全ての言語 ファイルが、<インストール先\>Contrib\Language Files 中にあります。
言語ファイルを挿入し終わった後、${LANG_langfile} は言語 id に定義されます(例えば、${LANG_ENGLISH} は 1033 に定義されます)。LangString、 LicenseLangString、LangDLL、VIAddVersionKey と共に 使って下さい。
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)"
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)
バージョン2現在で NSIS は多言語を完全にサポートしています。1つのインストーラのインター フェースが 多言語をサポートできます。
各言語の為にデフォルト インターフェーステキストと言語プロパティをロードするには LoadLanguageFile を使って下さい。
デフォルト インターフェーステキストは、 ComponentText などのような命令を使って容易に変更 できます。
あなた自身の文字列中に標準言語文字列の内容を使う事もできます(例えば、$(^Name) は Name 命令を使ってセットされたインストーラの名前が 入っています)。すべての標準言語文字列の名前は、言語ファイル中の文字列のすぐ上にコメント として記載されています。言語ファイルは <インストール先\>Contrib\Language Files にあります。
あなた自身の言語文字列を作成するには、 LangString を使って下さい。
多言語を持つインストーラの例に関しては、 languages.nsi を見て下さい。
インストーラが動作を開始する時、インターフェース言語を選択するのにこれらのステップを 通ります:
LangDLL プラグインは、ユーザーにインストーラーの言語を選択するオプションを与える事を 可能にします。インストーラー中のすべての言語の言語id (${LANG_langfile}) とその名前をただ pushし、それで、pushされた言語の番号、キャプション、ユーザーに言語を選択する事を教える テキストが LangDialog と呼ばれるプラグイン関数を呼び、$LANGUAGE に返された値をpopして、 次に行けるようになります。もしユーザーがキャンセルボタンをクリックすると、戻り値は "cancel" になります。
使用例に関しては、 languages.nsi を見て下さい。
RTL 言語は、右から左へ書かれる言語(例えば、アラビア語とヘブライ語)です。NSIS は RTL 言語を完全にサポートしています。言語ファイル中に 言語が RTL であるかそうでないかを指定する 場所があります。実行時に現在の言語が RTL であるかどうかを見つけ出すには、$(^RTL) 言語文字列 の値を確認して下さい。言語が RTL なら 1 、そうでないなら 0 です。ダイアログを作成する プラグインは普通 RTL 設定も持っていて、それらを使っている時に これが役に立つ事ができます。
NSIS スクリプティング言語の能力は、DLL ファイル中に提供される機能性を利用する事によって 拡張され得ます。おそらく これの最もよく知られた例は、すべての NSIS リリースにバンドルされている InstallOptions.dll です。
NSIS コンパイラーは開始する時に、DLL の為のプラグイン ディレクトリーをスキャンして 見つかったプラグインとそのエクスポートされた関数のリストを作ります。 コンパイルの間 もし コンパイラーが言語キーワードを見つけると思っている所で 例えば fred::flintstone などのシーケンスに出くわすと、コンパイラーはこのリストをくまなく捜します。 もしリスト エントリーが fred.dll が flintstone 関数をエクスポートしていると 具体的に述べていると、 NSIS は fred.dll ファイルを 作成されるインストーラー バイナリー中にパックします。
プラグイン コマンドの実行の間、NSIS は必要な DLL をテンポラリーフォルダー ($PLUGINSDIR) に アンパックして、指定されたすべての引数を(右から左の順で)プッシュし、そのあとで DLL 関数を 実行します。
プラグイン呼び出しはこの様になります:
InstallOptions::dialog "ini_file_location.ini"
すべてのパラメーターがスタック上にプッシュされます(このケースでは プラグイン関数は1つのパラメーターだけを必要としています)。 いくつかのプラグイン コマンドは スタック上にいかなるパラメーターも必要としないかもしれませんし、 他の物は それらをより多く必要とするかもしれません。 プラグイン コマンドを使うには、関数がどんなパラメーターを必要とするかを知る為に プラグインの為のドキュメンテーションを読む必要があるでしょう。
もしユーザーのハードドライブやどこかほかの場所に保存されているプラグインを呼びたいなら、 CallInstDLL を使って下さい。 ほとんどすべてのプラグインが インストーラーの機能性を提供しているので、プラグイン コマンドを使う事が より容易にします。 あるバージョンのあなたのアプリケーションにリンクされて インストールフォルダーにコピーされているべきである プラグインを作成した時に、CallInstDLL を使う事が助けになり得ます。
サイレント インストーラーは、ユーザーの介在をまったく必要としないインターフェースを持たない インストーラーです。ユーザーはどんなダイアログも見ず、どんな質問もされません。これは、 ユーザーの介在無しに何かをインストールやアンインストールしたいネットワーク管理者にとって 役に立つので、かなり多くのコンピューター上で素早く操作を行う事ができます。また、 2つのインストーラーを表示する代わりに インストーラー中に別のものを埋め込み、必要なすべての 情報を集めたい 他の製作者にとっても、役に立ちます。
NSIS インストーラーとアンインストーラーは、サイレントでもサイレントで無くも在り得ます。 インストーラーやアンインストーラーがサイレントである時、すべてのコールバック関数が呼ばれる 訳ではありません。.onGUIInit、 .onGUIEnd、そのアンインストーラーで同等のもの、特定のページやページタイプに関連した どのコールバックも 呼ばれません。
インストーラーやアンインストーラーをサイレントにするにはいくつかの方法があります:
インストーラー/アンインストーラーがサイレントであるかどうかをチェックするには、 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