NSISメモ
ダウンロード&解凍
使用法:!insertmacro DOWNLOAD [ファイルのアドレス] [保存ファイル名] [拡張子]
別途、inetc、nsisunz、Nsis7z、UnRAR.exeが必要。
#code(nsi)
!macro DOWNLOAD URL FILE EXT
inetc::get /useragent "インストーラー名" /nocancel "${URL}" "$TEMP\${FILE}.${EXT}" /end Pop $0 StrCmp $0 "OK" +3 MessageBox MB_OK|MB_ICONEXCLAMATION 'Download Failure : $0 $\r$\nPlease check firewall settings.' /SD IDOK Abort
${Switch} ${EXT} ${Case} 'rar' ExecWait "$TEMP\unrar x $TEMP\${FILE}.rar $OUTDIR" Delete "$TEMP\${FILE}.rar" ${Break} ${Case} 'zip' nsisunz::UnzipToLog "$TEMP\${FILE}.zip" $OUTDIR Pop $R0 Delete "$TEMP\${FILE}.zip" StrCmp $R0 "success" +3 MessageBox MB_ICONEXCLAMATION|MB_OK 'Extract failure.' Abort ${Break} ${Case} '7z' Nsis7z::Extract "$TEMP\${FILE}.7z" $OUTDIR Delete $TEMP\${FILE}.7z StrCmp $R0 "success" +3 MessageBox MB_ICONEXCLAMATION|MB_OK 'Extract failure.' Abort
${Break} ${EndSwitch}
!macroend
}}
rar解凍を入れる場合は、unrar.exeをダウンロードしてきて、パッケージに含める。(unrar.exeはライセンス的に問題ない)
#code(nsis)
Function .onInit
SetOutPath $TEMP File 'UnRAR.exe'
FunctionEnd
Function .onGUIend
Delete '$TEMP\UnRAR.exe'
FunctionEnd
}}
Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)のインストール確認
インストールされていない場合は、上のマクロを使って自動ダウンロード&インストール。vcredist_x86の2008のレジストリは、HKEY_CLASSES_ROOT\Installer\Products\1A4DE204B5F8A783688899A7FB858B2Fに存在するので
#code(nsi)
!macro CHECK_VCREDIST
ReadRegStr $R0 HKCR "Installer\Products\1718586FE72CF38449654E79D7F97FFF" "" StrCmp $R0 "" 0 +4 !insertmacro DOWNLOAD [vcredist_x86.exeのURL] vcredist_x86 exe ExecWait '"$TEMP\${DLLMSVC8}" /q:a /c:"VCREDI~1.EXE /q:a /c:""msiexec /i vcredist.msi /qb!"" "' Delete $TEMP\vcredist_x86.exe
!macroend
}}
インストールしたファイルの変更ができない
ExecWaitでコマンドラインでicaclsを実行。
ExecWait 'icacls /grant USER:MODE /Q /T [ファイル名]'