Microsoft SQL Server 2008 Native Client x86/x64が入っていなければ、チェックを入れる。
例:
!include "LogicLib.nsh" !macro _IsProductInstalled _a _b _t _f Push $0 !insertmacro _LOGICLIB_TEMP StrCpy $0 `${_b}` System::Call 'msi.dll::MsiQueryProductStateA(t) i(r0) .r0' StrCpy $_LOGICLIB_TEMP $0 Pop $0 !insertmacro _= $_LOGICLIB_TEMP 5 `${_t}` `${_f}` !macroend !define IsProductInstalled `"" IsProductInstalled` Function .onInit ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{90140000-001C-0000-0000-0000000FF1CE}" "InstallLocation" ${If} $0 == "" SectionSetFlags ${AccessDatabaseEngine} 1 ${EndIf} ${If} "$PROGRAMFILES32" == "$PROGRAMFILES64" ${IfNot} ${IsProductInstalled} "{A51AFEE1-ED96-45F1-85E4-6A41BC4461C3}" ;x86 SectionSetFlags ${x86} 1 ${EndIf} ${Else} ${IfNot} ${IsProductInstalled} "{5F3BA538-ADB6-48C4-90B1-179C0358C53E}" ;x64 SectionSetFlags ${x64} 1 ${EndIf} ${EndIf} FunctionEnd若干、修正しました。5/15 11:43, 11:52
INSTALLSTATEの定義は次の通り:
typedef enum tagINSTALLSTATE { INSTALLSTATE_NOTUSED = -7, // component disabled INSTALLSTATE_BADCONFIG = -6, // configuration data corrupt INSTALLSTATE_INCOMPLETE = -5, // installation suspended or in progress INSTALLSTATE_SOURCEABSENT = -4, // run from source, source is unavailable INSTALLSTATE_MOREDATA = -3, // return buffer overflow INSTALLSTATE_INVALIDARG = -2, // invalid function argument INSTALLSTATE_UNKNOWN = -1, // unrecognized product or feature INSTALLSTATE_BROKEN = 0, // broken INSTALLSTATE_ADVERTISED = 1, // advertised feature INSTALLSTATE_REMOVED = 1, // component being removed (action state, not settable) INSTALLSTATE_ABSENT = 2, // uninstalled (or action state absent but clients remain) INSTALLSTATE_LOCAL = 3, // installed on local drive INSTALLSTATE_SOURCE = 4, // run from source, CD or net INSTALLSTATE_DEFAULT = 5, // use default, local or source } INSTALLSTATE;
Windows Installerの細かい所は存じませんが、5が帰ってきたらセットアップ済みのようです。
MsiQueryProductState function
http://msdn.microsoft.com/en-us/library/aa370363(v=vs.85).aspx
INSTALLSTATE_UNKNOWN (-1)
The product is neither advertised or installed.
INSTALLSTATE_ADVERTISED (1)
The product is advertised but not installed.
INSTALLSTATE_ABSENT (2)
The product is installed for a different user.
INSTALLSTATE_DEFAULT (5)
The product is installed for the current user.