<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>跑马圈地 &#187; NSIS</title>
	<atom:link href="http://www.ukuang.com/tag/nsis/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ukuang.com</link>
	<description>一切恩爱会，无常难久得。声势多畏惧，命危于晨露。 因爱故生忧，因爱故生怖。若离于爱者，无忧亦无怖。</description>
	<lastBuildDate>Mon, 16 Jan 2012 17:51:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>【NSIS使用经验】打包含有oracle客户端的应用程序</title>
		<link>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e6%89%93%e5%8c%85%e5%90%ab%e6%9c%89oracle%e5%ae%a2%e6%88%b7%e7%ab%af%e7%9a%84%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e6%89%93%e5%8c%85%e5%90%ab%e6%9c%89oracle%e5%ae%a2%e6%88%b7%e7%ab%af%e7%9a%84%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:01:23 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[NSIS]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=66</guid>
		<description><![CDATA[<p></p> <p>有关如何抽取oracle客户端，请参见《制作安装包之抽取oracle客户端的一种方法》。</p> <p>抽取文件后，在安装的时候还需要修改相应的注册表，环境变量，NSIS脚本代码大致如下（oracle10g，支持oracle oledb）：</p> <p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p> <p>;在注册表中写入oracle信息 WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE&#8221; &#8220;inst_loc&#8221; &#8220;C:\Program Files\Oracle\Inventory&#8221; WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;ORACLE_HOME&#8221; &#8220;$INSTDIR\Oracle&#8221; WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;ORACLE_HOME_NAME&#8221; &#8220;OraClient10g_home1&#8243; WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;ORACLE_GROUP_NAME&#8221; &#8220;Oracle &#8211; OraClient10g_home1&#8243; WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;ORACLE_BUNDLE_NAME&#8221; &#8220;Enterprise&#8221; WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;NLS_LANG&#8221; &#8220;SIMPLIFIED CHINESE_CHINA.ZHS16GBK&#8221; WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;OLEDB&#8221; &#8220;$INSTDIR\Oracle\oledb\mesg&#8221; WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;StmtCacheSize&#8221; &#8220;0&#8243; WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;CacheType&#8221; &#8220;Memory&#8221; [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!184">
<p>有关如何抽取oracle客户端，请参见《<a href="http://bluffstone.spaces.live.com/blog/cns%21378A3196AFD42482%21178.entry">制作安装包之抽取oracle客户端的一种方法</a>》。</p>
<p>抽取文件后，在安装的时候还需要修改相应的注册表，环境变量，NSIS脚本代码大致如下（oracle10g，支持oracle oledb）：</p>
<p><em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</em></p>
<p><em>;在注册表中写入oracle信息<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE&#8221; &#8220;inst_loc&#8221; &#8220;C:\Program Files\Oracle\Inventory&#8221;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;ORACLE_HOME&#8221; &#8220;$INSTDIR\Oracle&#8221;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;ORACLE_HOME_NAME&#8221; &#8220;OraClient10g_home1&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;ORACLE_GROUP_NAME&#8221; &#8220;Oracle &#8211; OraClient10g_home1&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;ORACLE_BUNDLE_NAME&#8221; &#8220;Enterprise&#8221;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;NLS_LANG&#8221; &#8220;SIMPLIFIED CHINESE_CHINA.ZHS16GBK&#8221;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;OLEDB&#8221; &#8220;$INSTDIR\Oracle\oledb\mesg&#8221;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243; &#8220;StmtCacheSize&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;CacheType&#8221; &#8220;Memory&#8221;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;ChunkSize&#8221; &#8220;100&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;DistribTX&#8221; &#8220;1&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;FetchSize&#8221; &#8220;100&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;OSAuthent&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;PLSQLRset&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;PwdChgDlg&#8221; &#8220;1&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;SchRstLng&#8221; &#8220;10000&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;UserDefFn&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;DisableRetClause&#8221; &#8220;1&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;VCharNull&#8221; &#8220;1&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;TraceCategory&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;TraceFileName&#8221; &#8220;c:\OraOLEDB.trc&#8221;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;TraceLevel&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;TraceOption&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;SPPrmDefVal&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB&#8221; &#8220;StmtCacheSize&#8221; &#8220;0&#8243; </em></p>
<p><em> WriteRegStr   HKCR &#8220;OraOLEDB.Oracle.1&#8243; &#8220;&#8221; &#8220;Oracle Provider for OLE DB&#8221;<br />
WriteRegStr   HKCR &#8220;OraOLEDB.Oracle.1\CLSID&#8221; &#8220;&#8221; &#8220;{3F63C36E-51A3-11D2-BB7D-00C04FA30080}&#8221; </em></p>
<p><em> WriteRegStr   HKCR &#8220;OraOLEDB.Oracle&#8221; &#8220;&#8221; &#8220;Oracle Provider for OLE DB&#8221;<br />
WriteRegStr   HKCR &#8220;OraOLEDB.Oracle\CLSID&#8221; &#8220;&#8221; &#8220;{3F63C36E-51A3-11D2-BB7D-00C04FA30080}&#8221;<br />
WriteRegStr   HKCR &#8220;OraOLEDB.Oracle\CurVer&#8221; &#8220;&#8221; &#8220;OraOLEDB.Oracle.1&#8243; </em></p>
<p><em> WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}&#8221; &#8220;&#8221; &#8220;OraOLEDB.Oracle&#8221;<br />
WriteRegDWORD HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}&#8221; &#8220;OLEDB_SERVICES&#8221; 0xffffffff<br />
WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\ExtendedErrors&#8221; &#8220;&#8221; &#8220;Extended Error Lookup Service&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\ExtendedErrors\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}&#8221; &#8220;&#8221; &#8220;Oracle OLE DB Error Lookup&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\InprocServer32&#8243; &#8220;&#8221; &#8220;$INSTDIR\Oracle\bin\OraOLEDB10.DLL&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\InprocServer32&#8243; &#8220;ThreadingModel&#8221; &#8220;Both&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\OLE DB Provider&#8221; &#8220;&#8221; &#8220;Oracle Provider for OLE DB&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\ProgID&#8221; &#8220;&#8221; &#8220;OraOLEDB.Oracle.1&#8243;<br />
WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\TypeLib&#8221; &#8220;&#8221; &#8220;{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}\VersionIndependentProgID&#8221; &#8220;&#8221; &#8220;OraOLEDB.Oracle&#8221; </em></p>
<p><em> WriteRegStr   HKCR &#8220;OraOLEDB.ErrorLookup.1&#8243; &#8220;&#8221; &#8220;Oracle OLE DB Error Lookup&#8221;<br />
WriteRegStr   HKCR &#8220;OraOLEDB.ErrorLookup.1\CLSID&#8221; &#8220;&#8221; &#8220;{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}&#8221; </em></p>
<p><em> WriteRegStr   HKCR &#8220;OraOLEDB.ErrorLookup&#8221; &#8220;&#8221; &#8220;Oracle OLE DB Error Lookup&#8221;<br />
WriteRegStr   HKCR &#8220;OraOLEDB.ErrorLookup\CLSID&#8221; &#8220;&#8221; &#8220;{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}&#8221;<br />
WriteRegStr   HKCR &#8220;OraOLEDB.ErrorLookup\CurVer&#8221; &#8220;&#8221; &#8220;OraOLEDB.ErrorLookup.1&#8243; </em></p>
<p><em> WriteRegStr   HKCR &#8220;CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}&#8221; &#8220;&#8221; &#8220;Oracle OLE DB Error Lookup&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}\InprocServer32&#8243; &#8220;&#8221; &#8220;$INSTDIR\Oracle\bin\OraOLEDB10.DLL&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}\InprocServer32&#8243; &#8220;ThreadingModel&#8221; &#8220;Both&#8221;<br />
WriteRegStr   HKCR &#8220;CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}\ProdID&#8221; &#8220;&#8221; &#8220;OraOLEDB.ErrorLookup.1&#8243;<br />
WriteRegStr   HKCR &#8220;CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}\VersionIndependentProgID&#8221; &#8220;&#8221; &#8220;OraOLEDB.ErrorLookup.1&#8243; </em></p>
<p><em> WriteRegStr   HKCR &#8220;TypeLib\{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}\1.0&#8243; &#8220;&#8221; &#8220;OraOLEDB 1.0 Type Library&#8221;<br />
WriteRegStr   HKCR &#8220;TypeLib\{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}\1.0\0\win32&#8243; &#8220;&#8221; &#8220;$INSTDIR\Oracle\bin\OraOLEDB10.DLL&#8221;<br />
WriteRegStr   HKCR &#8220;TypeLib\{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}\1.0\FLAGS&#8221; &#8220;&#8221; &#8220;0&#8243;<br />
WriteRegStr   HKCR &#8220;TypeLib\{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}\1.0\HELPDIR&#8221; &#8220;&#8221; &#8220;$INSTDIR\Oracle\bin\&#8221; </em></p>
<p><em> ;设置oracle的环境变量<br />
ReadRegStr $0 HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221;<br />
WriteRegExpandStr HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221; &#8220;$0;$INSTDIR\Oracle\bin\&#8221;<br />
;刷新环境变量<br />
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 &#8220;STR:Environment&#8221;</em></p>
<p><em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</em></p>
<p>在卸载section中，需要删除相应的注册表项和环境变量：</p>
<p><em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</em></p>
<p><em>;删除oracle注册表信息<br />
DeleteRegKey HKCR &#8220;TypeLib\{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}\1.0&#8243;<br />
DeleteRegKey HKCR &#8220;CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}&#8221;<br />
DeleteRegKey HKCR &#8220;OraOLEDB.ErrorLookup&#8221;<br />
DeleteRegKey HKCR &#8220;OraOLEDB.ErrorLookup.1&#8243;<br />
DeleteRegKey HKCR &#8220;CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}&#8221;<br />
DeleteRegKey HKCR &#8220;OraOLEDB.Oracle&#8221;<br />
DeleteRegKey HKCR &#8220;OraOLEDB.Oracle.1&#8243;<br />
DeleteRegKey HKLM &#8220;SOFTWARE\ORACLE\KEY_OraClient10g_home1&#8243;<br />
DeleteRegKey HKLM &#8220;SOFTWARE\ORACLE&#8221;<br />
;删除设置oracle的环境变量<br />
ReadRegStr $R0 HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221;<br />
${WordReplace} $R0 &#8220;;$INSTDIR\Oracle\bin\&#8221; &#8220;&#8221; &#8220;+&#8221; $R1<br />
;MessageBox MB_OK|MB_USERICON &#8216;$R0 &#8211; $INSTDIR &#8211; $R1 &#8216;<br />
WriteRegExpandStr HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221; &#8220;$R1&#8243;</em></p>
<p><em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</em></div>
<p></span></p>
<div class="shr-publisher-66"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e6%89%93%e5%8c%85%e5%90%ab%e6%9c%89oracle%e5%ae%a2%e6%88%b7%e7%ab%af%e7%9a%84%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【NSIS使用经验】修改和删除环境变量</title>
		<link>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e4%bf%ae%e6%94%b9%e5%92%8c%e5%88%a0%e9%99%a4%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e4%bf%ae%e6%94%b9%e5%92%8c%e5%88%a0%e9%99%a4%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:00:08 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[NSIS]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=64</guid>
		<description><![CDATA[<p></p> <p>;设置oracle的环境变量到PATH路径 ReadRegStr $0 HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221; WriteRegExpandStr HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221; &#8220;$0;$INSTDIR\Oracle\bin\&#8221; ;刷新环境变量 SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 &#8220;STR:Environment&#8221;</p> <p>;利用WordReplace函数从PATH中删除设置oracle的环境变量 ;需要在文件头引入相应的头文件：!include &#8220;WordFunc.nsh&#8221; ReadRegStr $R0 HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221; ${WordReplace} $R0 &#8220;;$INSTDIR\Oracle\bin\&#8221; &#8220;&#8221; &#8220;+&#8221; $R1 ;MessageBox MB_OK&#124;MB_USERICON &#8216;$R0 &#8211; $INSTDIR &#8211; $R1 &#8216; WriteRegExpandStr HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221; &#8220;$R1&#8243;</p> <p></p> ]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!181">
<p>;设置oracle的环境变量到PATH路径<br />
ReadRegStr $0 HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221;<br />
WriteRegExpandStr HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221; &#8220;$0;$INSTDIR\Oracle\bin\&#8221;<br />
;刷新环境变量<br />
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 &#8220;STR:Environment&#8221;</p>
<p>;利用WordReplace函数从PATH中删除设置oracle的环境变量<br />
;需要在文件头引入相应的头文件：!include &#8220;WordFunc.nsh&#8221;<br />
ReadRegStr $R0 HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221;<br />
${WordReplace} $R0 &#8220;;$INSTDIR\Oracle\bin\&#8221; &#8220;&#8221; &#8220;+&#8221; $R1<br />
;MessageBox MB_OK|MB_USERICON &#8216;$R0 &#8211; $INSTDIR &#8211; $R1 &#8216;<br />
WriteRegExpandStr HKLM &#8220;SYSTEM\CurrentControlSet\Control\Session Manager\Environment&#8221; &#8220;Path&#8221; &#8220;$R1&#8243;</p></div>
<p></span></p>
<div class="shr-publisher-64"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e4%bf%ae%e6%94%b9%e5%92%8c%e5%88%a0%e9%99%a4%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>【NSIS使用经验】禁止多个安装程序实例或禁止重复安装程序</title>
		<link>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e7%a6%81%e6%ad%a2%e5%a4%9a%e4%b8%aa%e5%ae%89%e8%a3%85%e7%a8%8b%e5%ba%8f%e5%ae%9e%e4%be%8b%e6%88%96%e7%a6%81%e6%ad%a2%e9%87%8d%e5%a4%8d/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e7%a6%81%e6%ad%a2%e5%a4%9a%e4%b8%aa%e5%ae%89%e8%a3%85%e7%a8%8b%e5%ba%8f%e5%ae%9e%e4%be%8b%e6%88%96%e7%a6%81%e6%ad%a2%e9%87%8d%e5%a4%8d/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 11:59:02 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[NSIS]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=62</guid>
		<description><![CDATA[<p></p> <p>;在安装程序运行前的回调函数前实现 Function .onInit ;禁止多个安装程序实例 System::Call &#8216;kernel32::CreateMutexA(i 0, i 0, t &#8220;JWBClient&#8221;) i .r1 ?e&#8217; Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK&#124;MB_ICONEXCLAMATION &#8220;安装程序已经在运行。&#8221; Abort</p> <p>;禁止重复安装程序 ReadRegStr $0 HKLM &#8216;${PRODUCT_DIR_REGKEY}&#8217; &#8220;&#8221; StrLen $1 $0 IntCmp $1 0 +3 +1 +1 MessageBox MB_OK&#124;MB_USERICON &#8216;$(^Name) 已安装在计算机中。如需重新安装，请卸载已有的安装&#8217; Quit FunctionEnd</p> <p></p> ]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!183">
<p>;在安装程序运行前的回调函数前实现<br />
Function .onInit<br />
;禁止多个安装程序实例<br />
System::Call &#8216;kernel32::CreateMutexA(i 0, i 0, t &#8220;JWBClient&#8221;) i .r1 ?e&#8217;<br />
Pop $R0<br />
StrCmp $R0 0 +3<br />
MessageBox MB_OK|MB_ICONEXCLAMATION &#8220;安装程序已经在运行。&#8221;<br />
Abort</p>
<p>;禁止重复安装程序<br />
ReadRegStr $0 HKLM &#8216;${PRODUCT_DIR_REGKEY}&#8217; &#8220;&#8221;<br />
StrLen $1 $0<br />
IntCmp $1 0 +3 +1 +1<br />
MessageBox MB_OK|MB_USERICON &#8216;$(^Name) 已安装在计算机中。如需重新安装，请卸载已有的安装&#8217;<br />
Quit<br />
FunctionEnd</p></div>
<p></span></p>
<div class="shr-publisher-62"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e3%80%90nsis%e4%bd%bf%e7%94%a8%e7%bb%8f%e9%aa%8c%e3%80%91%e7%a6%81%e6%ad%a2%e5%a4%9a%e4%b8%aa%e5%ae%89%e8%a3%85%e7%a8%8b%e5%ba%8f%e5%ae%9e%e4%be%8b%e6%88%96%e7%a6%81%e6%ad%a2%e9%87%8d%e5%a4%8d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>制作安装包之抽取oracle客户端的一种方法</title>
		<link>http://www.ukuang.com/2009/10/10/%e5%88%b6%e4%bd%9c%e5%ae%89%e8%a3%85%e5%8c%85%e4%b9%8b%e6%8a%bd%e5%8f%96oracle%e5%ae%a2%e6%88%b7%e7%ab%af%e7%9a%84%e4%b8%80%e7%a7%8d%e6%96%b9%e6%b3%95/</link>
		<comments>http://www.ukuang.com/2009/10/10/%e5%88%b6%e4%bd%9c%e5%ae%89%e8%a3%85%e5%8c%85%e4%b9%8b%e6%8a%bd%e5%8f%96oracle%e5%ae%a2%e6%88%b7%e7%ab%af%e7%9a%84%e4%b8%80%e7%a7%8d%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 11:57:30 +0000</pubDate>
		<dc:creator>bluffstone</dc:creator>
				<category><![CDATA[技术经验帖]]></category>
		<category><![CDATA[NSIS]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.ukuang.com/?p=57</guid>
		<description><![CDATA[<p></p> <p>从oracle 10g开始，oracle官方提供了一个精简的client，叫oracle instant client，只有几十M，免安装，可供分发。其下载地址：</p> <p>http://www.oracle.com/technology/software/tech/oci/instantclient/index.html</p> <p>至 于如何配置、使用等，本文不予介绍。如果能够使用此client打包程序成功的，也可以不必看此文。网上有网友说，这个client比起普通的 client，还存在很多bug，但我没有证实过。我之所以需要手工抽取，是因为，它不包括oracle oledb，而我的程序需要它。</p> <p>下面介绍我此次抽取客户端的经历，以及从中总结出的一种通用的抽取方法。</p> <p>首先，参照了三篇网文《Oracle10g Client的手工分发》（http://www.cnblogs.com/pilybird/archive/2006/10/24/538338.html），《Oracle OLEDB 的手工分发》（http://www.cnblogs.com/pilybird/archive/2006/10/26/540943.html），《Oracle学习笔记：手工注册oracle的oledb驱动》（http://www.cnblogs.com/jinzhenshui/archive/2009/01/08/1371634.html），我抽取了必须的文件，具体的抽取过程，可以参照下列dos脚本（需要修改定义的变量）：</p> <p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p> <p>@ECHO    从Oracle 10g Client中提取精简客户端</p> <p>REM 定义变量 set ORACLE_CLIENT_HOME=E:\client_1 set DEST_ORA_CLIENT_DIR=E:\ora10g_client</p> <p>REM sqlplus目录 mkdir %DEST_ORA_CLIENT_DIR%\sqlplus mkdir %DEST_ORA_CLIENT_DIR%\sqlplus\mesg copy %ORACLE_CLIENT_HOME%\sqlplus\mesg\*.* %DEST_ORA_CLIENT_DIR%\sqlplus\mesg</p> <p>REM oracore目录 mkdir %DEST_ORA_CLIENT_DIR%\oracore mkdir %DEST_ORA_CLIENT_DIR%\oracore\zoneinfo copy %ORACLE_CLIENT_HOME%\oracore\zoneinfo\*.* %DEST_ORA_CLIENT_DIR%\oracore\zoneinfo mkdir %DEST_ORA_CLIENT_DIR%\oracore\mesg copy %ORACLE_CLIENT_HOME%\oracore\mesg\*.* %DEST_ORA_CLIENT_DIR%\oracore\mesg</p> <p>REM Network目录 mkdir %DEST_ORA_CLIENT_DIR%\Network mkdir %DEST_ORA_CLIENT_DIR%\Network\Admin [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"></p>
<div id="msgcns!378A3196AFD42482!178">
<p>从oracle 10g开始，oracle官方提供了一个精简的client，叫oracle instant client，只有几十M，免安装，可供分发。其下载地址：</p>
<p><a href="http://www.oracle.com/technology/software/tech/oci/instantclient/index.html">http://www.oracle.com/technology/software/tech/oci/instantclient/index.html</a></p>
<p>至 于如何配置、使用等，本文不予介绍。如果能够使用此client打包程序成功的，也可以不必看此文。网上有网友说，这个client比起普通的 client，还存在很多bug，但我没有证实过。我之所以需要手工抽取，是因为，它不包括oracle oledb，而我的程序需要它。</p>
<p>下面介绍我此次抽取客户端的经历，以及从中总结出的一种通用的抽取方法。</p>
<p>首先，参照了三篇网文《<a href="http://www.cnblogs.com/pilybird/archive/2006/10/24/538338.html">Oracle10g Client的手工分发</a>》（<a href="http://www.cnblogs.com/pilybird/archive/2006/10/24/538338.html">http://www.cnblogs.com/pilybird/archive/2006/10/24/538338.html</a>），《<a href="http://www.cnblogs.com/pilybird/archive/2006/10/26/540943.html">Oracle OLEDB 的手工分发</a>》（<a href="http://www.cnblogs.com/pilybird/archive/2006/10/26/540943.html">http://www.cnblogs.com/pilybird/archive/2006/10/26/540943.html</a>），《<a href="http://www.cnblogs.com/jinzhenshui/archive/2009/01/08/1371634.html">Oracle学习笔记：手工注册oracle的oledb驱动</a>》（<a href="http://www.cnblogs.com/jinzhenshui/archive/2009/01/08/1371634.html">http://www.cnblogs.com/jinzhenshui/archive/2009/01/08/1371634.html</a>），我抽取了必须的文件，具体的抽取过程，可以参照下列dos脚本（需要修改定义的变量）：</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>@ECHO    从Oracle 10g Client中提取精简客户端</p>
<p>REM 定义变量<br />
set ORACLE_CLIENT_HOME=E:\client_1<br />
set DEST_ORA_CLIENT_DIR=E:\ora10g_client</p>
<p>REM sqlplus目录<br />
mkdir %DEST_ORA_CLIENT_DIR%\sqlplus<br />
mkdir %DEST_ORA_CLIENT_DIR%\sqlplus\mesg<br />
copy %ORACLE_CLIENT_HOME%\sqlplus\mesg\*.* %DEST_ORA_CLIENT_DIR%\sqlplus\mesg</p>
<p>REM oracore目录<br />
mkdir %DEST_ORA_CLIENT_DIR%\oracore<br />
mkdir %DEST_ORA_CLIENT_DIR%\oracore\zoneinfo<br />
copy %ORACLE_CLIENT_HOME%\oracore\zoneinfo\*.* %DEST_ORA_CLIENT_DIR%\oracore\zoneinfo<br />
mkdir %DEST_ORA_CLIENT_DIR%\oracore\mesg<br />
copy %ORACLE_CLIENT_HOME%\oracore\mesg\*.* %DEST_ORA_CLIENT_DIR%\oracore\mesg</p>
<p>REM Network目录<br />
mkdir %DEST_ORA_CLIENT_DIR%\Network<br />
mkdir %DEST_ORA_CLIENT_DIR%\Network\Admin<br />
copy %ORACLE_CLIENT_HOME%\Network\Admin\sqlnet.ora %DEST_ORA_CLIENT_DIR%\Network\Admin\<br />
copy %ORACLE_CLIENT_HOME%\Network\Admin\tnsnames.ora %DEST_ORA_CLIENT_DIR%\Network\Admin\<br />
mkdir %DEST_ORA_CLIENT_DIR%\Network\mesg<br />
copy %ORACLE_CLIENT_HOME%\Network\mesg\*.* %DEST_ORA_CLIENT_DIR%\Network\mesg\</p>
<p>REM Bin目录<br />
mkdir %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oci.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oracle.key %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oraclient10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oracommon10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORACORE10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\orageneric10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\orahasgen10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oraldapclnt10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oran10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORANCDS10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\orancrypt10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oranhost10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oranl10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oranldap10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORANLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\orannzsbb10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oranro10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\orantcp10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\orantns10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oraocr10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oraocrb10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORAPLP10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORAPLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORASLAX10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORASNLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORASQL10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORAUNLS10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\orauts.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oravsn10.dll %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\ORAXML10.DLL %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\sqlplus.exe  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\sqlplusw.exe  %DEST_ORA_CLIENT_DIR%\Bin</p>
<p>REM 针对oracle oledb<br />
copy %ORACLE_CLIENT_HOME%\bin\oip10.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oip10.tlb  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\oradc.ocx  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10.tlb  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10us.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDB10zhs.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBgmr10.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBpus10.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrfc10.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrmc10.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDBrst10.dll  %DEST_ORA_CLIENT_DIR%\Bin<br />
copy %ORACLE_CLIENT_HOME%\bin\OraOLEDButl10.dll  %DEST_ORA_CLIENT_DIR%\Bin</p>
<p>REM Nls目录<br />
mkdir %DEST_ORA_CLIENT_DIR%\Nls<br />
mkdir %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx00001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx00023.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx10001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx10035.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx1boot.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20354.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx207d0.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx40001.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx20367.nlb %DEST_ORA_CLIENT_DIR%\Nls\data</p>
<p>REM 针对oracle oledb<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx2001f.nlb %DEST_ORA_CLIENT_DIR%\Nls\data<br />
copy %ORACLE_CLIENT_HOME%\Nls\data\lx40002.nlb %DEST_ORA_CLIENT_DIR%\Nls\data</p>
<p>mkdir %DEST_ORA_CLIENT_DIR%\Nls\mesg<br />
copy %ORACLE_CLIENT_HOME%\Nls\mesg\*.* %DEST_ORA_CLIENT_DIR%\Nls\mesg</p>
<p>@pause 按任意键退出……</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>抽取文件成功后，按照上面网文说的，导入相应的注册表，修改相应的环境变量，打包应用程序，安装后，运行还是不成功。试了几次，不成功后，后来想，是不是注册表有问题，于是想到了注册表监测软件Regmon。</p>
<p>接下来，在一台干净的机器（没有安装过oracle），安装oralce的普通client，选择上oracle oledb组件，使用Regmon监测安装过程。</p>
<p>安装成功后，采用Log parser2.2分析其监测日志，过滤出其中对注册表“CreateKey”的操作记录，仔细分析，可以找到下列键记录，从安装普通client的机器上导出这些键的注册表.reg文件。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE</p>
<p>HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1</p>
<p>HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient10g_home1\OLEDB</p>
<p>HKEY_CLASSES_ROOT\OraOLEDB.Oracle.1</p>
<p>HKEY_CLASSES_ROOT\OraOLEDB.Oracle</p>
<p>HKEY_CLASSES_ROOT\CLSID\{3F63C36E-51A3-11D2-BB7D-00C04FA30080}</p>
<p>HKEY_CLASSES_ROOT\OraOLEDB.ErrorLookup.1</p>
<p>HKEY_CLASSES_ROOT\OraOLEDB.ErrorLookup</p>
<p>HKEY_CLASSES_ROOT\CLSID\{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}</p>
<p>HKEY_CLASSES_ROOT\TypeLib\{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>再 重新打包，安装发现还是不成功，我猜想是不是少了某个文件，于是又想到了用于文件监测的Filemon工具，发现在运行我的程序的时候，去打 开%ORACLE_HOME% \Nls\data\下的一个.nlb文件不成功，于是添加，运行，ok（说明：上面的脚本已经包含此文件）。</p>
<p>利用上面的方法抽取，大约是28M左右。后来我想，何不利用Filemon检测到程序需要用到的文件列表，然后再抽取呢。于是我接下来做了下面的事情：</p>
<p>（1） 在一台干净的机器（没有安装过oracle），安装oracle客户端，选择oracle oledb组件；</p>
<p>（2） 把我的程序编译后直接拷贝到这台干净的机器上；</p>
<p>（3） 打开Filemon，运行编译的程序。</p>
<p>（4） 分析Filemon，利用Log parser2.2，查询出其中对oracle客户端所在目录下的文件“OPEN”操作的文件记录，即这些文件，是必须的文件；</p>
<p>（5） 继续利用Log parser2.2，根据查询出来的文件记录，生成相应的批处理脚本，稍加修改，即如下所示：</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>REM 提出oracle10g的客户端<br />
set ORA_CLIENT_DIR=E:\client_1<br />
set DEST_ORA_CLIENT_DIR=E:\oracle_client10g</p>
<p>mkdir   %DEST_ORA_CLIENT_DIR%\</p>
<p>mkdir   %DEST_ORA_CLIENT_DIR%\BIN\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAOLEDB10.DLL     %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAOLEDBGMR10.DLL  %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORACLIENT10.DLL    %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORACORE10.DLL      %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANLS10.DLL       %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAUNLS10.DLL      %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAUTS.DLL         %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAVSN10.DLL       %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORACOMMON10.DLL    %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAGENERIC10.DLL   %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORASNLS10.DLL      %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAXML10.DLL       %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAN10.DLL         %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANL10.DLL        %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANLDAP10.DLL     %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANNZSBB10.DLL    %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORALDAPCLNT10.DLL  %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANCRYPT10.DLL    %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANRO10.DLL       %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANHOST10.DLL     %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANCDS10.DLL      %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANTNS10.DLL      %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAPLS10.DLL       %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORASLAX10.DLL      %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAPLP10.DLL       %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAHASGEN10.DLL    %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAOCR10.DLL       %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAOCRB10.DLL      %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORANTCP10.DLL      %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORASQL10.DLL       %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAOLEDBRST10.DLL  %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAOLEDBUTL10.DLL  %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORACLE.KEY         %DEST_ORA_CLIENT_DIR%\bin\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAOLEDB10ZHS.DLL  %DEST_ORA_CLIENT_DIR%\BIN\<br />
copy    %ORA_CLIENT_DIR%\BIN\ORAOLEDBPUS10.DLL  %DEST_ORA_CLIENT_DIR%\BIN\</p>
<p>mkdir   %DEST_ORA_CLIENT_DIR%\NETWORK\<br />
mkdir   %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\<br />
copy    %ORA_CLIENT_DIR%\NETWORK\ADMIN\SQLNET.ORA  %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\<br />
copy    %ORA_CLIENT_DIR%\NETWORK\ADMIN\tnsnames.ora  %DEST_ORA_CLIENT_DIR%\NETWORK\ADMIN\<br />
mkdir    %DEST_ORA_CLIENT_DIR%\NLS\<br />
mkdir    %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX1BOOT.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX00001.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX2001F.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX10001.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX00023.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX20354.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX10035.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX20001.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX20367.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX207D0.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\<br />
copy    %ORA_CLIENT_DIR%\NLS\DATA\LX40002.NLB     %DEST_ORA_CLIENT_DIR%\NLS\DATA\</p>
<p>mkdir    %DEST_ORA_CLIENT_DIR%\ORACORE\<br />
mkdir    %DEST_ORA_CLIENT_DIR%\ORACORE\ZONEINFO\<br />
copy    %ORA_CLIENT_DIR%\ORACORE\ZONEINFO\TIMEZLRG.Dat  %DEST_ORA_CLIENT_DIR%\ORACORE\ZONEINFO\</p>
<p>mkdir %DEST_ORA_CLIENT_DIR%\RDBMS<br />
mkdir %DEST_ORA_CLIENT_DIR%\RDBMS\mesg<br />
copy    %ORA_CLIENT_DIR%\RDBMS\mesg\ocizhs.msb     %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\<br />
copy    %ORA_CLIENT_DIR%\RDBMS\mesg\ocius.msb      %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\<br />
copy    %ORA_CLIENT_DIR%\RDBMS\mesg\orazhs.msb     %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\<br />
copy    %ORA_CLIENT_DIR%\RDBMS\mesg\oraus.msb      %DEST_ORA_CLIENT_DIR%\RDBMS\mesg\<br />
@pause 按任意键继续……</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>（6）运行批处理，抽取必须的文件，利用这种方法抽取的oracle客户端大约26M左右。同时根据Regmon检测的注册表修改记录，还须修改path变量，打包应用程序。</p>
<p>（7）在一台干净的机器上，安装测试，运行，ok。</p>
<p>总结：</p>
<p>（1）此种方法具有通用性，可以用来抽取oracle其它版本，甚至其他任何你想抽取或瘦身的程序；</p>
<p>（2） 此种方法完全是一种外科式黑箱式技术，丝毫没有涉及程序的内部结构，这是其优点，也是其缺点，设想一个程序运行，在我们使用filemon监测的时候，它 依赖了一些文件，然后我们抽取了它，倘若在我们停止监测后，在一个其它的运用场景，该程序又调用了一些其它文件，那么这些程序就遗漏了，唯一能够补救的方 法就是，在使用filemon监测阶段，一定要能够充分的运行应用程序。</p>
<p>（3）抽取程序的要点：1）弄清楚需要抽取哪些必须的文件；2）弄清楚要修改哪些注册表；3）弄清楚要修改哪些环境变量。</p></div>
<p></span></p>
<div class="shr-publisher-57"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.ukuang.com/2009/10/10/%e5%88%b6%e4%bd%9c%e5%ae%89%e8%a3%85%e5%8c%85%e4%b9%8b%e6%8a%bd%e5%8f%96oracle%e5%ae%a2%e6%88%b7%e7%ab%af%e7%9a%84%e4%b8%80%e7%a7%8d%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

