• 21606阅读
  • 16回复

APlayer.dll控件分析之我见! [复制链接]

上一主题 下一主题
离线nevcry
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2013-07-25
以下所有测试在XP系统下完成:
注册APlayer.dll控件,控件的执行流程如下:

1.将控件文件拷贝到:C:\Documents and Settings\All Users\Application Data\Thunder Network\APlayer\目录下,分别为:APlayer_3.5.0.638.dll和atl71.dll.
(注意:如果当前系统中没有(C:\Documents and Settings\All Users\Application Data\Thunder Network\)这个文件夹的话,控件注册会报错!
所以:这里一定要注意Thunder Network文件夹是否存在,如果不存在,控件就无法注册,下边步骤就无法进行)


2.控件会在注册表,HKEY_CURRENT_USER\Software\Thunder Network\APlayer下建立path项,取值为:C:\Documents and Settings\All Users\Application Data\Thunder Network\APlayer\APlayer_3.5.0.638.dll,版本不同名字会有所区别.
3.注册npaplayer.dll控件.
4.查找path的值,取出path的路径信息,拷贝解码库文件到C:\Documents and Settings\All Users\Application Data\Thunder Network\APlayer\

多次测试后发现问题,关键问题找到,
如果文件夹C:\Documents and Settings\All Users\Application Data\Thunder Network不存在,控件就无法进行正常安装.
解决方法:建立文件夹,具体路径如下:C:\Documents and Settings\All Users\Application Data\Thunder Network,即可正常注册控件.

我的安装方案
控件安装:INStall.bat

@echo off
@md "C:\Documents and Settings\All Users\Application Data\Thunder Network"
@regsvr32 /s APlayer.dll
@regsvr32 /s npaplayer.dll
for /f "tokens=1,2,*" %%i in ('reg query "HKEY_CURRENT_USER\Software\Thunder Network\APlayer" ^| find /i "Path"') do SET "pURL=%%k"
@xcopy /E /Y .\codecs\*.* "%pURL%\..\codecs\*.*"

控件卸载:UnInstall.bat

@echo off
@regsvr32 /s /u APlayer.dll
@regsvr32 /s /u npaplayer.dll
for /f "tokens=1,2,*" %%i in ('reg query "HKEY_CURRENT_USER\Software\Thunder Network\APlayer" ^| find /i "Path"') do SET "pURL=%%k"
rd /s /q "%pURL%\..\..\..\Thunder Network"
@echo y|reg delete "HKEY_CURRENT_USER\Software\Thunder Network\" /va /f

正常的安装和卸载,保证无残留.
建议: APlayer.dll在注册时,加入Thunder Network文件路径的判断,当文件夹不存在时,先建立文件夹,然后拷贝控件到对应目录中.
离线aplayer

只看该作者 沙发  发表于: 2013-07-25
仔细, 专业!
离线hehaifeng

只看该作者 板凳  发表于: 2013-07-25
给力!
离线jack

只看该作者 地板  发表于: 2013-07-29
太认真了,
离线932966089

只看该作者 4楼 发表于: 2013-07-31
开发好,编译成安装包,安装到其他电脑上时是不是还要注册jdk,如果那台电脑没有安装迅雷或者迅雷看看,是不是就不能运行了
离线aplayer

只看该作者 5楼 发表于: 2013-08-01
回 932966089 的帖子
932966089:开发好,编译成安装包,安装到其他电脑上时是不是还要注册jdk,如果那台电脑没有安装迅雷或者迅雷看看,是不是就不能运行了 (2013-07-31 16:57)

如果不是网页调用,不用注册 APlayer 的,Application 可以从文件中创建 APlayer 实例(参考 SDK 中的方法),只要打包想要的解码器,完全可以绿色运行,也和迅雷或迅雷看看完全无关(APlayer是个独立的引擎,只依赖于Windows操作系统)。

离线932966089

只看该作者 6楼 发表于: 2013-08-01
回 aplayer 的帖子
aplayer:如果不是网页调用,不用注册 APlayer 的,Application 可以从文件中创建 APlayer 实例(参考 SDK 中的方法),只要打包想要的解码器,完全可以绿色运行,也和迅雷或迅雷看看完全无关(APlayer是个独立 .. (2013-08-01 10:23) 

我用C#语言编写了一个简单的程序,但在打包的时候VS作了个“无法判断APlayer.dll的依赖项目,请手动添加这些项目”的提示,我忽略了此项,打包后在本机可以正常使用,但换了一台电脑就不能运行,请问我是不是需要从某个位置拷贝些必要的文件到我编译的程序目录下面呢?
离线aplayer

只看该作者 7楼 发表于: 2013-08-01
回 932966089 的帖子
932966089:我用C#语言编写了一个简单的程序,但在打包的时候VS作了个“无法判断APlayer.dll的依赖项目,请手动添加这些项目”的提示,我忽略了此项,打包后在本机可以正常使用,但换了一台电脑就不能运 .. (2013-08-01 17:14) 

可能你 C# 创建 APlayer 实例的方式不是从文件中创建所致,
从你发的代码看好像是直接拖动控件的方式做的,这种是依赖 APlayer 注册的,
请参考 APlayer.chm 中描述的从文件中创建方法试试看,但它是 C++ 语言写的,
不知 C# 中如何实现,这个你更熟悉。
离线nevcry

只看该作者 8楼 发表于: 2013-08-02
我研究这个控件的执行流程就是为了实现.对于不同的电脑系统都能使用运行我们开发的应用.所以这个控件的注册就很重要. 一般我们的电脑都安装过 迅雷的产品,所以就本文中提到的"C:\Documents and Settings\All Users\Application Data\Thunder Network" 这个文件夹,迅雷已经帮我们创建过了.但是对于一个完全纯净的系统或者说是没有安装过迅雷产品的系统来说,这个文件夹是不存在的.在你运行SDK中提供的Install.bat 时,控件注册是失败的. 因为批处理中加入了 /s 参数,则在注册控件时,是以静默的方式来注册的.没有任何提示信息!如果你想确认控件注册是否成功, 将/s参数删除即可有提示信息.如果提示如我之前发帖时报出的错误,说明你的系统中没有安装过迅雷的产品,需要手动创建"C:\Documents and Settings\All Users\Application Data\Thunder Network" 这个文件夹即可.或安装迅雷的产品也可解决,比如:迅雷看看,迅雷等应用.
离线nevcry

只看该作者 9楼 发表于: 2013-08-02
回 932966089 的帖子
932966089:我用C#语言编写了一个简单的程序,但在打包的时候VS作了个“无法判断APlayer.dll的依赖项目,请手动添加这些项目”的提示,我忽略了此项,打包后在本机可以正常使用,但换了一台电脑就不能运 .. (2013-08-01 17:14) 

我研究这个控件的执行流程就是为了实现.对于不同的电脑系统都能使用运行我们开发的应用.所以这个控件的注册就很重要. 一般我们的电脑都安装过 迅雷的产品,所以就本文中提到的"C:\Documents and Settings\All Users\Application Data\Thunder Network" 这个文件夹,迅雷已经帮我们创建过了.但是对于一个完全纯净的系统或者说是没有安装过迅雷产品的系统来说,这个文件夹是不存在的.在你运行SDK中提供的Install.bat 时,控件注册是失败的. 因为批处理中加入了 /s 参数,则在注册控件时,是以静默的方式来注册的.没有任何提示信息!如果你想确认控件注册是否成功, 将/s参数删除即可有提示信息.如果提示如我之前发帖时报出的错误,说明你的系统中没有安装过迅雷的产品,需要手动创建"C:\Documents and Settings\All Users\Application Data\Thunder Network" 这个文件夹即可.或安装迅雷的产品也可解决,比如:迅雷看看,迅雷等应用.
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个