NSISコマンドレシピ

トップ > チップス > NSISコマンドレシピ
2012-02-13, nsis_tips

/tips/software/nsis/tips **コメントを記述する 「;」「#」「/* */」をコメントとして利用出来ます。

:; コメント :# コメント :/* C言語スタイルのコメント */

**画像関連 ***アイコンを設定する (調査中)

***バナーを設定する (調査中)

**アンインストール情報を付加する Windowsのレジストリを利用します。 :InstallDirRegKey HKLM "Software\\appname" "Install_Dir" : :UninstPage uninstConfirm :UninstPage instfiles : :Section "Base (required)" : : WriteRegStr HKLM Software\\appname "Install_Dir" "$INSTDIR" : : WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\appname" "DisplayName" "appname" : WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\appname" "UninstallString" '"$INSTDIR\\uninstall.exe"' : WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\appname" "NoModify" 1 : WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\appname" "NoRepair" 1 : WriteUninstaller "uninstall.exe" :SectionEnd : :Section "Uninstall" : DeleteRegKey HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\ss-1.0" : DeleteRegKey HKLM Software\\appname : : Delete $INSTDIR\\*.* : Delete $INSTDIR\\data\\* : : Delete "$SMPROGRAMS\\appname\\command.lnk" : RMDir "$SMPROGRAMS\\appname" : : Delete $INSTDIR\\uninstall.exe : : ; ディレクトリの削除 : RMDir "$INSTDIR\\data" : RMDir "$INSTDIR" :SectionEnd

**スタートメニューに登録する :CreateShortCut "$SMPROGRAMS\\appname\\command.lnk" "$INSTDIR\\bin\command.bat"

デフォルトではインストールを実行したユーザのスタートメニューにのみ登録されます。全てのユーザに対して登録を行うには、以下の指定を追加します。この指定はアンインストーラ側(ショートカットの削除時)にも必要です。

:SetShellVarContext all

**レジストリに値を書き込む :WriteRegStr root_key subkey key_name value

:;例 :WriteRegStr HKLM "Software\My Company\My Software" "foo" "bar"

root_keyには以下のいずれかを指定します。 ,HKCR or HKEY_CLASSES_ROOT ,HKLM or HKEY_LOCAL_MACHINE ,HKCU or HKEY_CURRENT_USER ,HKU or HKEY_USERS ,HKCC or HKEY_CURRENT_CONFIG ,HKDD or HKEY_DYN_DATA ,HKPD or HKEY_PERFORMANCE_DATA ,SHCTX or SHELL_CONTEXT

※subkeyに「HKCU\\Environment」を指定することでユーザの環境変数を設定することができます({link:/tips/other/windowsMisc,参照})。

**メッセージを日本語化する :LoadLanguageFile "$\{NSISDIR\}\\Contrib\\Language files\\Japanese.nlf"

**カスタムページを作成する 環境変数等のオプションをインストーラ中で入力させたい場合、カスタムページを利用します。ページ内に配置するラベルやフィールドはiniファイルに定義します(このファイルは値の(一時)記憶にも使用されます)。

:;InstallOptions.dll及びtest.iniの使用を宣言 :ReserveFile "$\{NSISDIR\}\Plugins\InstallOptions.dll" :ReserveFile "test.ini" : :;カスタムページを宣言 :Page custom C1 C2 "Page Title" :Page instfiles : :;作業ディレクトリを作成し、test.iniを設置 :Function .onInit : InitPluginsDir : File /oname=$PLUGINSDIR\test.ini "test.ini" :FunctionEnd : :;test.iniの内容でラベルや入力フィールドを配置 :Function C1 : InstallOptions::dialog "$PLUGINSDIR\test.ini" :FunctionEnd : :;こちらは特になにもしない :Function C2 :FunctionEnd : :;フィールドにセットされた値を変数に格納し、表示 :Section "" : ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 3" "State" : DetailPrint "Field3 = $0" :SectionEnd

test.ini :[Settings] :NumFields=3 : :[Field 1] :Type=GroupBox :Left=0 :Right=-1 :Top=0 :Bottom=-5 :Text="Title" : :[Field 2] :Type=Label :Left=10 :Right=-10 :Top=20 :Bottom=28 :Text="Description." : : :[Field 3] :Type=DirRequest :Left=10 :Right=-10 :Top=50 :Bottom=62 :Text=set variable.. :State="C:\\Program Files\\foo"

**ファイル中の文字列を置換する 設定ファイル中の特定の値をインストール時に決定したいような場合に利用できそうです。LineFindとWordReplaceという2つのマクロを組み合わせて利用します。下記の例では「foo.txt」内の「xyz」という文字列を「abc」に置き換えて「bar.txt」に保存します。

:!include "WordFunc.nsh" :!include "TextFunc.nsh" : :!insertmacro LineFind :!insertmacro WordReplace : :OutFile "replace.exe" : :Section : StrCpy $R0 0 : $\{LineFind\} "c:\foo.txt" "C:\bar.txt" "1:-1" "replace" : IfErrors 0 +2 : MessageBox MB_OK "Error" IDOK +2 : MessageBox MB_OK "Changed lines=$R0" :SectionEnd : :Function replace : StrCpy $1 $R9 : : $\{WordReplace\} '$R9' 'xyz' 'abc' '+*' $R9 : : StrCmp $1 $R9 +2 : IntOp $R0 $R0 + 1 : ;$R0 count of changed lines : : Push $0 :FunctionEnd

**Javaプログラムを起動するexeファイルを作る NSISではインストーラに限らず、そのスクリプト言語を利用してJavaプログラムを起動する実行ファイル(.exe)を生成することができます。Vistaのスタートメニューにバッチファイルを登録できないのが不便だったので、これを利用することにしました。

-{link:http://nsis.sourceforge.net/wiki/Java_Launcher} -{link:http://nsis.sourceforge.net/A_slightly_better_Java_Launcher}

上記スクリプトの最初に宣言されているクラスパスなどの変数を書き換えてコンパイルするだけで基本的には問題ありません。但し、Windows Vistaでの使用を想定する場合、以下の記述が必須です。

:RequestExecutionLevel user

これがないと、起動の度に「不明な発行元」という警告が表示されてしまいます。VistaのUACに関する記述は以下のURLを参考にして下さい。

-{link:http://nsis.sourceforge.net/UAC_plug-in}

**システムコマンドを実行する コンパイラユーティリティコマンド「!system」を利用して、任意の外部プログラムやコマンドを実行することができます。下記例では、新しいフォルダを作成しています。

:!system 'mkdir dist\bin'

**ブラウザ(IE)のプロキシ設定を取得する IEのプロキシ設定はレジストリに記録されているので、レジストリにアクセスし、それらを読み取ります。 :ReadRegStr $0 HKEY_CURRENT_USER "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" "ProxyServer" :ReadRegDWORD $1 HKEY_CURRENT_USER "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings" "ProxyEnable" :DetailPrint "ProxyServer: $0" :DetailPrint "ProxyEnable: $1" # 0:Disabled 1:Enabled

読み取りだけが目的であれば、管理者権限のない動作レベルでも実行可能です。 :RequestExecutionLevel user

この記事は役に立ちましたか?