NSIS/Docs/src/library.but
kichik 727caf534d typos
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3612 212acab6-be3b-0410-9dea-997c60f758d6
2004-08-07 14:17:00 +00:00

247 lines
7.7 KiB
Text

\A{library} DLL/TLB Library Setup
\H{library_intro} Introduction
NSIS 2.01 features a new system for the installation and uninstallation of dynamic link libraries (DLL) and type libraries (TLB).
Using this new system you can handle the complete setup with one single line of code:
\b File copying
\b File copying on reboot
\b Version checks
\b Registration and unregistration
\b Registration and unregistration on reboot
\b Shared DLL counting
\b Windows File Protection checks
The macros are stored in the header file Library.nsh, which should be included in scripts using this system:
\c !include Library.nsh
Note that you can only compile scripts using this system on Windows systems. It is not possible to compile on Linux etc.
\H{library_install} Library Installation
\S1{} Introduction
The InstallLib macro allows you to install a library.
To ask the user for a reboot if required, use the Modern UI with a Finish page or use \R{IfRebootFlag}{IfRebootFlag} and make your own page or message box.
\S1{} Parameters
\c libtype shared protection localfile destfile tempbasedir
\\<b\\>libtype\\</b\\>
The type of the library
DLL - Dynamic link library (DLL)\\<br\\>
REGDLL - DLL that has to be registered\\<br\\>
TLB - Type library or DLL that contains a type LIBRARY\\<br\\>
REGDLLTLB - DLL that has to be registered and contains a type library\\<br\\>
\\<b\\>shared\\</b\\>
Specify whether the library is shared with other applications
NOTSHARED - The library is not shared\\<br\\>
$VARNAME - Variable that is empty when the application is installed for the first time,
which is when the shared library count will be increased.\\<br\\>
\\<b\\>install\\</b\\>
Specify the installation method
REBOOT_PROTECTED
\b Upgrade the library on reboot when in use (required for system files).
\b Upgrade the library if the file is not protected by Windows File Protection.
NOREBOOT_PROTECTED
\b Warns the user when the library is in use. The user will have to close applications using the library.
\b Upgrade the library if the file is not protected by Windows File Protection.
REBOOT_NOTPROTECTED
\b Upgrade the library on reboot when in use (required for system files).
\b Upgrade the library without checking for Windows File Protection.
NOREBOOT_NOTPROTECTED
\b Warns the user when the library is in use. The user will have to close applications using the library.
\b Upgrade the library without checking for Windows File Protection.
\\<b\\>localfile\\</b\\>
Location of the library on the compiler system
\\<b\\>destfile\\</b\\>
Location to store the library on the user's system
\\<b\\>tempbasedir\\</b\\>
Directory on the user's system to store a temporary file when the system has to be rebooted.
For Windows 9x/ME support, this directory should be on the same volume as the destination file (destfile).
The Windows temp directory could be located on any volume, so you cannot use this directory.
\S1{} Notes
\b If you want to support Windows 9x/ME, you can only use short filenames (8.3).
\S1{} Example
\c ;Add code here that sets $ALREADY_INSTALLED to a non-zero value if the application is
\c ;already installed. For example:
\c
\c IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ;Replace MyApp.exe with your application filename
\c StrCpy $ALREADY_INSTALLED 1
\c new_installation:
\c
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED dllname.dll $SYSDIR\dllname.dll $SYSDIR
\H{library_uninstall} Library Uninstallation
\S1{} Introduction
The UnInstallLib macro allows you to uninstall a library.
\S1{} Parameters
\c libtype shared uninstall file
\\<b\\>libtype\\</b\\>
The type of the library
DLL - Dynamic link library (DLL)\\<br\\>
REGDLL - DLL that has to be registered\\<br\\>
TLB - Type library or DLL that contains a type LIBRARY\\<br\\>
REGDLLTLB - DLL that has to be registered and contains a type library\\<br\\>
\\<b\\>shared\\</b\\>
Specify whether the library is shared with other applications
NOTSHARED - The library is not shared\\<br\\>
SHARED - The library is shared and should be removed if the shared library count
indicates that the file is not in use anymore..\\<br\\>
\\<b\\>uninstall\\</b\\>
Specify the uninstallation method
NOREMOVE
\b The library should not be removed. You should use this option for common or important
system files such as the Visual Basic/C++/MFC runtimes.
REBOOT_PROTECTED
\b Remove the library on reboot when in use (required for system files).
\b Remove the library if the file is not protected by Windows File Protection.
NOREBOOT_PROTECTED
\b Warns the user when the library is in use. The user will have to close applications using the library.
\b Remove the library if the file is not protected by Windows File Protection.
REBOOT_NOTPROTECTED
\b Remove the library on reboot when in use (required for system files).
\b Remove the library without checking for Windows File Protection.
NOREBOOT_NOTPROTECTED
\b Warns the user when the library is in use. The user will have to close applications using the library.
\b Remove the library without checking for Windows File Protection.
\\<b\\>file\\</b\\>
Location of the library
\S1{} Example
\c !insertmacro UnInstallLib REGDLL SHARED REBOOT_NOTPROTECTED $SYSDIR\dllname.dll
\H{library_vb6} Visual Basic 6 Runtimes
Add this code to your script to install and uninstall the VB6 runtimes.
The correct version of the following files should be stored in your script folder
(or modify the paths to the local files if you want to use another folder):
\b msvbvm60.dll
\b oleaut32.dll
\b olepro32.dll
\b oleaut32.dll
\b comcat.dll
\b asycfilt.dll
\b stdole2.tlb
A \W{http://support.microsoft.com/default.aspx?scid=kb;en-us;290887}{Microsoft article} that explains how to obtain these files is available.
To ask the user for a reboot if required, use the Modern UI with a Finish page or use \R{IfRebootFlag}{IfRebootFlag} and make your own page or message box.
\c !include Library.nsh
\c
\c Var ALREADY_INSTALLED
\c
\c Section "-Install VB6 runtimes"
\c
\c ;Add code here that sets $ALREADY_INSTALLED to a non-zero value if the application is already installed. For example:
\c
\c IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ;Replace MyApp.exe with your application filename
\c StrCpy $ALREADY_INSTALLED 1
\c new_installation:
\c
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED "msvbvm60.dll" "$SYSDIR\msvbvm60.dll" "$SYSDIR"
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "olepro32.dll" "$SYSDIR\olepro32.dll" "$SYSDIR"
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "comcat.dll" "$SYSDIR\comcat.dll" "$SYSDIR"
\c !insertmacro InstallLib DLL $ALREADY_INSTALLED REBOOT_PROTECTED "asycfilt.dll" "$SYSDIR\asycfilt.dll" "$SYSDIR"
\c !insertmacro InstallLib TLB $ALREADY_INSTALLED REBOOT_PROTECTED "stdole2.tlb" "$SYSDIR\stdole2.tlb" "$SYSDIR"
\c
\c SectionEnd
\c
\c Section "-un.Uninstall VB6 runtimes"
\c
\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\msvbvm60.dll"
\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\oleaut32.dll"
\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\olepro32.dll"
\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\comcat32.dll"
\c !insertmacro UnInstallLib DLL SHARED NOREMOVE "$SYSDIR\asycfilt.dll"
\c !insertmacro UnInstallLib TLB SHARED NOREMOVE "$SYSDIR\stdole2.tlb"
\c
\c SectionEnd
You can use similar code to install common VB6 ActiveX controls (such as the controls for Windows Common Controls).