【NSIS使用经验】打包含有oracle客户端的应用程序

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

—————————————————————————————————-

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>