有关如何抽取oracle客户端,请参见《制作安装包之抽取oracle客户端的一种方法》。
抽取文件后,在安装的时候还需要修改相应的注册表,环境变量,NSIS脚本代码大致如下(oracle10g,支持oracle oledb):
----------------------------------------------------------------------------------------------------
;在注册表中写入oracle信息
WriteRegStr HKLM "SOFTWARE/ORACLE" "inst_loc" "C:/Program Files/Oracle/Inventory"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1" "ORACLE_HOME" "$INSTDIR/Oracle"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1" "ORACLE_HOME_NAME" "OraClient10g_home1"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1" "ORACLE_GROUP_NAME" "Oracle - OraClient10g_home1"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1" "ORACLE_BUNDLE_NAME" "Enterprise"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1" "NLS_LANG" "SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1" "OLEDB" "$INSTDIR/Oracle/oledb/mesg"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1" "StmtCacheSize" "0"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "CacheType" "Memory"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "ChunkSize" "100"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "DistribTX" "1"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "FetchSize" "100"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "OSAuthent" "0"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "PLSQLRset" "0"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "PwdChgDlg" "1"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "SchRstLng" "10000"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "UserDefFn" "0"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "DisableRetClause" "1"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "VCharNull" "1"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "TraceCategory" "0"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "TraceFileName" "c:/OraOLEDB.trc"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "TraceLevel" "0"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "TraceOption" "0"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "SPPrmDefVal" "0"
WriteRegStr HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB" "StmtCacheSize" "0"
WriteRegStr HKCR "OraOLEDB.Oracle.1" "" "Oracle Provider for OLE DB"
WriteRegStr HKCR "OraOLEDB.Oracle.1/CLSID" "" "{3F63C36E-51A3-11D2-BB7D-00C04FA30080}"
WriteRegStr HKCR "OraOLEDB.Oracle" "" "Oracle Provider for OLE DB"
WriteRegStr HKCR "OraOLEDB.Oracle/CLSID" "" "{3F63C36E-51A3-11D2-BB7D-00C04FA30080}"
WriteRegStr HKCR "OraOLEDB.Oracle/CurVer" "" "OraOLEDB.Oracle.1"
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}" "" "OraOLEDB.Oracle"
WriteRegDWORD HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}" "OLEDB_SERVICES" 0xffffffff
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}/ExtendedErrors" "" "Extended Error Lookup Service"
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}/ExtendedErrors/{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}" "" "Oracle OLE DB Error Lookup"
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}/InprocServer32" "" "$INSTDIR/Oracle/bin/OraOLEDB10.DLL"
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}/InprocServer32" "ThreadingModel" "Both"
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}/OLE DB Provider" "" "Oracle Provider for OLE DB"
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}/ProgID" "" "OraOLEDB.Oracle.1"
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}/TypeLib" "" "{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}"
WriteRegStr HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}/VersionIndependentProgID" "" "OraOLEDB.Oracle"
WriteRegStr HKCR "OraOLEDB.ErrorLookup.1" "" "Oracle OLE DB Error Lookup"
WriteRegStr HKCR "OraOLEDB.ErrorLookup.1/CLSID" "" "{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}"
WriteRegStr HKCR "OraOLEDB.ErrorLookup" "" "Oracle OLE DB Error Lookup"
WriteRegStr HKCR "OraOLEDB.ErrorLookup/CLSID" "" "{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}"
WriteRegStr HKCR "OraOLEDB.ErrorLookup/CurVer" "" "OraOLEDB.ErrorLookup.1"
WriteRegStr HKCR "CLSID/{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}" "" "Oracle OLE DB Error Lookup"
WriteRegStr HKCR "CLSID/{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}/InprocServer32" "" "$INSTDIR/Oracle/bin/OraOLEDB10.DLL"
WriteRegStr HKCR "CLSID/{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}/InprocServer32" "ThreadingModel" "Both"
WriteRegStr HKCR "CLSID/{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}/ProdID" "" "OraOLEDB.ErrorLookup.1"
WriteRegStr HKCR "CLSID/{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}/VersionIndependentProgID" "" "OraOLEDB.ErrorLookup.1"
WriteRegStr HKCR "TypeLib/{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}/1.0" "" "OraOLEDB 1.0 Type Library"
WriteRegStr HKCR "TypeLib/{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}/1.0/0/win32" "" "$INSTDIR/Oracle/bin/OraOLEDB10.DLL"
WriteRegStr HKCR "TypeLib/{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}/1.0/FLAGS" "" "0"
WriteRegStr HKCR "TypeLib/{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}/1.0/HELPDIR" "" "$INSTDIR/Oracle/bin/"
;设置oracle的环境变量
ReadRegStr $0 HKLM "SYSTEM/CurrentControlSet/Control/Session Manager/Environment" "Path"
WriteRegExpandStr HKLM "SYSTEM/CurrentControlSet/Control/Session Manager/Environment" "Path" "$0;$INSTDIR/Oracle/bin/"
;刷新环境变量
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment"
----------------------------------------------------------------------------------------------------
在卸载section中,需要删除相应的注册表项和环境变量:
----------------------------------------------------------------------------------------------------
;删除oracle注册表信息
DeleteRegKey HKCR "TypeLib/{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}/1.0"
DeleteRegKey HKCR "CLSID/{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}"
DeleteRegKey HKCR "OraOLEDB.ErrorLookup"
DeleteRegKey HKCR "OraOLEDB.ErrorLookup.1"
DeleteRegKey HKCR "CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}"
DeleteRegKey HKCR "OraOLEDB.Oracle"
DeleteRegKey HKCR "OraOLEDB.Oracle.1"
DeleteRegKey HKLM "SOFTWARE/ORACLE/KEY_OraClient10g_home1"
DeleteRegKey HKLM "SOFTWARE/ORACLE"
;删除设置oracle的环境变量
ReadRegStr $R0 HKLM "SYSTEM/CurrentControlSet/Control/Session Manager/Environment" "Path"
${WordReplace} $R0 ";$INSTDIR/Oracle/bin/" "" "+" $R1
;MessageBox MB_OK|MB_USERICON '$R0 - $INSTDIR - $R1 '
WriteRegExpandStr HKLM "SYSTEM/CurrentControlSet/Control/Session Manager/Environment" "Path" "$R1"