制作安装包之抽取oracle客户端的一种方法

从oracle 10g开始,oracle官方提供了一个精简的client,叫oracle instant client,只有几十M,免安装,可供分发。其下载地址:

http://www.oracle.com/technology/software/tech/oci/instantclient/index.html

至于如何配置、使用等,本文不予介绍。如果能够使用此client打包程序成功的,也可以不必看此文。网上有网友说,这个client比起普通的client,还存在很多bug,但我没有证实过。我之所以需要手工抽取,是因为,它不包括oracle oledb,而我的程序需要它。

下面介绍我此次抽取客户端的经历,以及从中总结出的一种通用的抽取方法。

首先,参照了三篇网文《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脚本(需要修改定义的变量):

--------------------------------------------------------------------

@ECHO    从Oracle 10g Client中提取精简客户端

REM 定义变量
set ORACLE_CLIENT_HOME=E:/client_1
set DEST_ORA_CLIENT_DIR=E:/ora10g_client

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

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

REM Network目录
mkdir %DEST_ORA_CLIENT_DIR%/Network
mkdir %DEST_ORA_CLIENT_DIR%/Network/Admin
copy %ORACLE_CLIENT_HOME%/Network/Admin/sqlnet.ora %DEST_ORA_CLIENT_DIR%/Network/Admin/
copy %ORACLE_CLIENT_HOME%/Network/Admin/tnsnames.ora %DEST_ORA_CLIENT_DIR%/Network/Admin/
mkdir %DEST_ORA_CLIENT_DIR%/Network/mesg
copy %ORACLE_CLIENT_HOME%/Network/mesg/*.* %DEST_ORA_CLIENT_DIR%/Network/mesg/

REM Bin目录
mkdir %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oci.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oracle.key %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oraclient10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oracommon10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORACORE10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/orageneric10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/orahasgen10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oraldapclnt10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oran10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORANCDS10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/orancrypt10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oranhost10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oranl10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oranldap10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORANLS10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/orannzsbb10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oranro10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/orantcp10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/orantns10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oraocr10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oraocrb10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORAPLP10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORAPLS10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORASLAX10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORASNLS10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORASQL10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORAUNLS10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/orauts.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oravsn10.dll %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/ORAXML10.DLL %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/sqlplus.exe  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/sqlplusw.exe  %DEST_ORA_CLIENT_DIR%/Bin

REM 针对oracle oledb
copy %ORACLE_CLIENT_HOME%/bin/oip10.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oip10.tlb  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/oradc.ocx  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDB10.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDB10.tlb  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDB10us.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDB10zhs.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDBgmr10.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDBpus10.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDBrfc10.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDBrmc10.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDBrst10.dll  %DEST_ORA_CLIENT_DIR%/Bin
copy %ORACLE_CLIENT_HOME%/bin/OraOLEDButl10.dll  %DEST_ORA_CLIENT_DIR%/Bin

REM Nls目录
mkdir %DEST_ORA_CLIENT_DIR%/Nls
mkdir %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx00001.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx00023.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx10001.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx10035.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx1boot.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx20001.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx20354.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx207d0.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx40001.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx20367.nlb %DEST_ORA_CLIENT_DIR%/Nls/data

REM 针对oracle oledb
copy %ORACLE_CLIENT_HOME%/Nls/data/lx2001f.nlb %DEST_ORA_CLIENT_DIR%/Nls/data
copy %ORACLE_CLIENT_HOME%/Nls/data/lx40002.nlb %DEST_ORA_CLIENT_DIR%/Nls/data

mkdir %DEST_ORA_CLIENT_DIR%/Nls/mesg
copy %ORACLE_CLIENT_HOME%/Nls/mesg/*.* %DEST_ORA_CLIENT_DIR%/Nls/mesg

@pause 按任意键退出……

--------------------------------------------------------------------

抽取文件成功后,按照上面网文说的,导入相应的注册表,修改相应的环境变量,打包应用程序,安装后,运行还是不成功。试了几次,不成功后,后来想,是不是注册表有问题,于是想到了注册表监测软件Regmon。

接下来,在一台干净的机器(没有安装过oracle),安装oralce的普通client,选择上oracle oledb组件,使用Regmon监测安装过程。

安装成功后,采用Log parser2.2分析其监测日志,过滤出其中对注册表“CreateKey”的操作记录,仔细分析,可以找到下列键记录,从安装普通client的机器上导出这些键的注册表.reg文件。

--------------------------------------------------------------------

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient10g_home1

HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraClient10g_home1/OLEDB

HKEY_CLASSES_ROOT/OraOLEDB.Oracle.1

HKEY_CLASSES_ROOT/OraOLEDB.Oracle

HKEY_CLASSES_ROOT/CLSID/{3F63C36E-51A3-11D2-BB7D-00C04FA30080}

HKEY_CLASSES_ROOT/OraOLEDB.ErrorLookup.1

HKEY_CLASSES_ROOT/OraOLEDB.ErrorLookup

HKEY_CLASSES_ROOT/CLSID/{3FC8E6E4-53FF-11D2-BB7D-00C04FA30080}

HKEY_CLASSES_ROOT/TypeLib/{0BB9AFD1-51A1-11D2-BB7D-00C04FA30080}

--------------------------------------------------------------------

再重新打包,安装发现还是不成功,我猜想是不是少了某个文件,于是又想到了用于文件监测的Filemon工具,发现在运行我的程序的时候,去打开%ORACLE_HOME% /Nls/data/下的一个.nlb文件不成功,于是添加,运行,ok(说明:上面的脚本已经包含此文件)。

利用上面的方法抽取,大约是28M左右。后来我想,何不利用Filemon检测到程序需要用到的文件列表,然后再抽取呢。于是我接下来做了下面的事情:

(1) 在一台干净的机器(没有安装过oracle),安装oracle客户端,选择oracle oledb组件;

(2) 把我的程序编译后直接拷贝到这台干净的机器上;

(3) 打开Filemon,运行编译的程序。

(4) 分析Filemon,利用Log parser2.2,查询出其中对oracle客户端所在目录下的文件“OPEN”操作的文件记录,即这些文件,是必须的文件;

(5) 继续利用Log parser2.2,根据查询出来的文件记录,生成相应的批处理脚本,稍加修改,即如下所示:

--------------------------------------------------------------------

REM 提出oracle10g的客户端
set ORA_CLIENT_DIR=E:/client_1
set DEST_ORA_CLIENT_DIR=E:/oracle_client10g

mkdir   %DEST_ORA_CLIENT_DIR%/

mkdir   %DEST_ORA_CLIENT_DIR%/BIN/ 
copy    %ORA_CLIENT_DIR%/BIN/ORAOLEDB10.DLL     %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAOLEDBGMR10.DLL  %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORACLIENT10.DLL    %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORACORE10.DLL      %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANLS10.DLL       %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAUNLS10.DLL      %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAUTS.DLL         %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAVSN10.DLL       %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORACOMMON10.DLL    %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAGENERIC10.DLL   %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORASNLS10.DLL      %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAXML10.DLL       %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAN10.DLL         %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANL10.DLL        %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANLDAP10.DLL     %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANNZSBB10.DLL    %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORALDAPCLNT10.DLL  %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANCRYPT10.DLL    %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANRO10.DLL       %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANHOST10.DLL     %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANCDS10.DLL      %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANTNS10.DLL      %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAPLS10.DLL       %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORASLAX10.DLL      %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAPLP10.DLL       %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAHASGEN10.DLL    %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAOCR10.DLL       %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAOCRB10.DLL      %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORANTCP10.DLL      %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORASQL10.DLL       %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAOLEDBRST10.DLL  %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAOLEDBUTL10.DLL  %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORACLE.KEY         %DEST_ORA_CLIENT_DIR%/bin/
copy    %ORA_CLIENT_DIR%/BIN/ORAOLEDB10ZHS.DLL  %DEST_ORA_CLIENT_DIR%/BIN/
copy    %ORA_CLIENT_DIR%/BIN/ORAOLEDBPUS10.DLL  %DEST_ORA_CLIENT_DIR%/BIN/

mkdir   %DEST_ORA_CLIENT_DIR%/NETWORK/
mkdir   %DEST_ORA_CLIENT_DIR%/NETWORK/ADMIN/ 
copy    %ORA_CLIENT_DIR%/NETWORK/ADMIN/SQLNET.ORA  %DEST_ORA_CLIENT_DIR%/NETWORK/ADMIN/
copy    %ORA_CLIENT_DIR%/NETWORK/ADMIN/tnsnames.ora  %DEST_ORA_CLIENT_DIR%/NETWORK/ADMIN/
mkdir    %DEST_ORA_CLIENT_DIR%/NLS/                  
mkdir    %DEST_ORA_CLIENT_DIR%/NLS/DATA/ 
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX1BOOT.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX00001.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX2001F.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX10001.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX00023.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX20354.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX10035.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX20001.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX20367.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX207D0.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/
copy    %ORA_CLIENT_DIR%/NLS/DATA/LX40002.NLB     %DEST_ORA_CLIENT_DIR%/NLS/DATA/

mkdir    %DEST_ORA_CLIENT_DIR%/ORACORE/              
mkdir    %DEST_ORA_CLIENT_DIR%/ORACORE/ZONEINFO/     
copy    %ORA_CLIENT_DIR%/ORACORE/ZONEINFO/TIMEZLRG.Dat  %DEST_ORA_CLIENT_DIR%/ORACORE/ZONEINFO/

mkdir %DEST_ORA_CLIENT_DIR%/RDBMS
mkdir %DEST_ORA_CLIENT_DIR%/RDBMS/mesg
copy    %ORA_CLIENT_DIR%/RDBMS/mesg/ocizhs.msb     %DEST_ORA_CLIENT_DIR%/RDBMS/mesg/
copy    %ORA_CLIENT_DIR%/RDBMS/mesg/ocius.msb      %DEST_ORA_CLIENT_DIR%/RDBMS/mesg/
copy    %ORA_CLIENT_DIR%/RDBMS/mesg/orazhs.msb     %DEST_ORA_CLIENT_DIR%/RDBMS/mesg/
copy    %ORA_CLIENT_DIR%/RDBMS/mesg/oraus.msb      %DEST_ORA_CLIENT_DIR%/RDBMS/mesg/
@pause 按任意键继续……

--------------------------------------------------------------------

(6)运行批处理,抽取必须的文件,利用这种方法抽取的oracle客户端大约26M左右。同时根据Regmon检测的注册表修改记录,还须修改path变量,打包应用程序。

(7)在一台干净的机器上,安装测试,运行,ok。

总结:

(1)此种方法具有通用性,可以用来抽取oracle其它版本,甚至其他任何你想抽取或瘦身的程序;

(2)此种方法完全是一种外科式黑箱式技术,丝毫没有涉及程序的内部结构,这是其优点,也是其缺点,设想一个程序运行,在我们使用filemon监测的时候,它依赖了一些文件,然后我们抽取了它,倘若在我们停止监测后,在一个其它的运用场景,该程序又调用了一些其它文件,那么这些程序就遗漏了,唯一能够补救的方法就是,在使用filemon监测阶段,一定要能够充分的运行应用程序。

(3)抽取程序的要点:1)弄清楚需要抽取哪些必须的文件;2)弄清楚要修改哪些注册表;3)弄清楚要修改哪些环境变量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值