• C# DLL文件注册问题(涉及AxInterop.WMPLib.dll等)


    近日遇到问题,给客户安装软件涉及视频等音影播放,安装软件启动过程遇到这样问题:

    分析报错原因

          没有注册类别 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)

    查找原因: Interop.WMPLib.dll  AxInterop.WMPLib.dll

                 程序内含private AxAPlayer3Lib.AxPlayer axPlayer;

    最初出现问题分析思路:1.先注册两个动态库,注册失败:

    两个动态库是不能直接注册。

    (背景:之前软件刚接手问过上一任,软件内含迅雷看看的转码播放。

      咨询结果:视频转码的过程不需要注册,视频正常播放需要视频组件注册。

      经验:还有之前在很多的客户机安装上都是这样,不注册迅雷看看组件,软件都正常打开,但是视频不能播放。)

    2.在客户机上出现了以上的问题,突然安装的软件报错,出现以上错误,当时认为缺少.Net组件或者某个库文件。

     通过下载微软运行库文件,安装解决了,当时肯定了确实视屏播放方面的组件。

    3.又有一台机器安装64位系统,打开软件报错,安装上一次的微软的运行库文件,不好使;下载新的64位的微软运行库同样不好使。

      思考良久也不知道怎样解决了。

    4.今天突然想到把迅雷看看组件注册一下,软件正常使用。

    总结一下上边的各种状况:

    1.从开始下手 AxAPlayer3Lib.AxPlayer:

    APlayer 媒体播放引擎是迅雷公司从 2009 年开始开发的音视频媒体文件播放内核。
    迅雷看看播放器就是使用它作为播放内核的,目前迅雷看看播放器在PC播放器市场占有率排第一。
    APlayer 有如下特征:
    ◆ APlayer 是 Windows 平台的播放内核
    ◆ 基于封闭式 DirectShow 架构 (不受Windows系统解码环境干扰)
    ........此处省略N多字。
     
    2.之前在很多电脑上安装过迅雷看看或者其他播放器,所以组件不需要注册就就能正常播放。
     
    3.新装电脑,没有相关的MediaPlay方面的组件,必然不能正常启动软件。
     
    4.结论:组件的正常播放需要安装需要的组件,整个软件的启动在与是否含有MediaPlay方面的底层组件。
               再次遇到这样的问题,可以直接注册Aplay动态库 或者安装迅雷看看(或者其他的播放器)。
     
     
    其它方面知识:
    1.动态库注册:(在资料查阅中获得了两个新知识,以下copy来的)
       

        动态库:将AxInterop.WMPLib.dll复制到C:WindowsSystem32目录下。
        系统是64位的请将32位的dll文件复制到C:WindowsSysWOW64目录
        打开"开始-运行-输入regsvr32 AxInterop.WMPLib.dll",回车即可解决。

        下面的代码保存为“注册.bat“,放到dll文件同级目录(只要在同一个文件夹里面有这两个文件即可),双击注册.bat,就会自动完成AxInterop.WMPLib.dll注册(win98不支持)。

        代码如下:
    @echo 开始注册
    copy AxInterop.WMPLib.dll %windir%system32
    regsvr32 %windir%system32AxInterop.WMPLib.dll /s
    @echo AxInterop.WMPLib.dll注册成功
    @pause
     
    2.C#动态库免注册调用:
        用Visual Studio.NET 2010,生成免注册程序轻而易举,然而,开发时却必须要先注册COM+控件。尽管可以无须注册COM控件来运行一个程序,但在开发免注册程序的电脑上,却必须要先注册COM组件,所以目前来说,免注册COM仅限于运行时。(也就是说,开发的时候也是需要安装Aplayer的SDK的):
       在VS中使用的步骤是:
    1、在解决方案浏览器中,打开引用文件夹,当添加COM+(ActiveX)控件到程序窗体时(工具箱-右击-选择项目-COM+)
    2、把添加到工具箱的COM+控件拖到窗体,会自动完成引用
    3、点击选中引用的控件,在属性面板,把“独立”设置为:true
    有了创建后的清单文件,只需简单地复制debug目录(可用COPY)到任何电脑上,就可以在没有注册表项的情况下使用该控件,现在,发布一个程序简单得就如复制粘贴一般简单了。

    通过上面的方法,用C#制作的桌面版Aplayer应用程序,打包发布,安装程序就不用考虑aplayer的注册问题,只需要按照正常的打包方案发布应用就行了,也可以作为纯绿色的,直接拷贝debug目录里的文件到其他电脑上,也是能够运行的!
     
  • 相关阅读:
    docker--docker介绍
    docker--虚拟化
    高级运维工程师的打怪升级之路
    mysql常用函数
    CentOS 7 下使用 Firewall
    51nod 1094 和为k的连续区间(map+前缀和)
    51nod 1092 回文字符串(dp)
    51nod 1062 序列中最大的数(打表预处理)
    51nod 1284 2 3 5 7的倍数(容斥原理+反面思考)
    51nod 1347 旋转字符串(思维好题)
  • 原文地址:https://www.cnblogs.com/sunrunzhi/p/4959420.html
Copyright © 2020-2023  润新知