Home > Latest topics

Latest topics > NSISで制御構造

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

NSISで制御構造 - Feb 08, 2008

NSIS(Nullsoft Scriptable Install System)というものがあって、元々はWinampのインストーラを作るために使われてたらしいんだけど、これを使うとCとかVBとかDelphiとか分からなくても(簡単なものなら)Windows用のネイティブアプリケーションを作れる。まあ元々インストーラ作成用に作られたものだから、インストーラじゃないものを作るのは大変なんだけど。有名どころではPortable Firefoxの正体がNSISだったりする(大まかな処理の流れを紐解くと、USBメモリに置いたFirefoxの実行ファイル群とプロファイルをテンポラリフォルダにコピーして、起動オプション付きで起動することで強制的にそのプロファイルで起動し、Firefoxが終了したらプロファイルに行われた変更をUSBメモリに書き戻す、という感じ)。あとFirefoxのWindows版インストーラもNSIS製。

しかし厄介なことに制御構文がGoToっぽいものばっかりで、if/then/elseで複数行のブロックに分岐するといったことすらできないから、とかちょっと凝ったことをしようとすると、いつの時代のプログラムだよ!!と言いたくなるようなワケの分からん読みにくいスクリプトになってしまう。

Var MYVAR
StrCpy $MYVAR "ほげほげ"
; 第1引数が第2引数と等しければ第3引数で示された行へ、異なれば第4引数で示された行へ。
StrCmp "$MYVAR" "" "" NOT_BLANK
StrCpy $MYVAR "空ですよ"
GoTo EXIT
NOT_BLANK:
StrCpy $MYVAR "空じゃないですよ"
EXIT:

これはマジで死ねる。

……と思ってたんだけど、ヘルプをよくよく読むと、LogicLibという標準ライブラリを使えばもーちょっとマシな制御ができるようになるとあったので早速試してみた。

!include 'LogicLib.nsh'
...
StrCpy $MYVAR "ほげほげ"
${If} "$MYVAR" == ""
  StrCpy $MYVAR "空ですよ"
${Else}
  StrCpy $MYVAR "空じゃないですよ"
${EndIf}

うわ、これ超便利。NSISが一気に実用的になった!!! ちなみにswitch/caseとかwhile/for/do系のループとかもあります。

ということに感動して昨日はウッカリ深夜までNSIS漬けになってしまいました。

分類:ソフトウェア > nsis, , , , 時刻:00:20 | Comments/Trackbacks (0) | Edit

Comments/Trackbacks

TrackBack ping me at


の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2008-02-08_logiclib.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

writeback message: Ready to post a comment.

2020年11月30日時点の日本の首相のファミリーネーム(ひらがなで回答)

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のコメント

最近のつぶやき