有关如何抽取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″
—————————————————————————————————-

最近留言