C#开发ActiveX求助...引用了一个第三方的dll,编译通过了。安装调用的时候调用不到这个dll

z-sen 2016-05-27 04:45:04
C#开发ActiveX求助...

引用了一个第三方的dll,编译通过了。安装包制作安装,通过ie调用的时候调用ActiveX没有引用到第三方dll的方法都可以正常使用,引用到第三方dll的方法调用都没反应,感觉是第三方dll没有加载到,但是我dll跟ActiveX放的同个目录,网上找了好多方法,试过把第三方dll复制到windows、system32、浏览器根目录下都没有用。请高手指点.
...全文
167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2016-05-27
  • 打赏
  • 举报
回复
做ActiveX需要关注的点,很多。我曾经有个流水账的经验总结,你注意其中的一些关键字,自己百度看看 ------------- 本机可以使用: 1、因为加了这个[assembly: AllowPartiallyTrustedCallers()]有问题,反而不能显示,所以删除了设置 部署到其他电脑不能使用: 1、检查是否是IE配置问题(其实最后发现,在代码的处理到位的情况下,并不需要特别的配置IE) 2、检查AllowPartiallyTrustedCallers问题 2.1、本机不能用,用了会出错 2.2、但如果确定是这个问题,那必须得先解决这个问题 2.3、先撇开本地不能用的问题,先看部署客户端后的情况。结果发现运行出错-》ActiveX安全性问题,在构造函数中初始化,是不允许的 2.4、因此,将构造函数初始化代码,放到Initial()中实现:提早实现 2.5、又发现新的问题,还是出错,结果发现,是Activx引用的所有其他dll,都必须定义为AllowPartiallyTrustedCallers() 2.6、终于,部署的客户端不出错了。同时开发环境下运行,也能正常运行了(原来是设置了AllowPartiallyTrustedCallers就出不来UI,现在可以了) 2.7、但在部署的客户端,仍然不行,UI出不来 2.8、然后猜测,会不会是引用了其他dll,而其他dll也需要注册?基于此,我专门做了一个独立的Test程序,就一个dll,最终结果是:一样不行 2.9、没办法了,然后是狂翻帮助,在csdn上找,试图找到解决方法,过程中,发现了一些后来证明对我有用的东西,但当时并没觉得有什么用处,是ComRegisterFunctionAttribute 3.0、继续baidu,发现基本上网上的解决方案,都不难。为什么他们能行,我就不行? 3.1、卡住了,还有什么办法?降低版本试试,使用vs2008测试,这样更接近网络上介绍的方法,也就是有Setup安装包制作。这样可以对比看,SetUp安装包有没有特别之处? 3.2、发现用vs2008+Setup安装包,可行!终于有重大突破。尝试不用Setup包,还是用原来的Regasm方式,发现也和一样不行! 3.3、现在问题转变为:Setup安装包里,有什么特殊的,和我用RegAsm不同? 3.4、找msi解析功能Orca,解析其中注册表的部分,和RegAsm写入注册表的有什么不同?发现不同在于少了CodeBase定义 3.5、手工把CodeBase加上,正常了!此处该欢呼! 3.6、现在在回想baidu上看到的几种方案,一切问题似乎都明白了。网上两类方案都行,而我不行的原因 3.7、新问题来了:如何在注册表补充注册?这让我回想起baidu到的另外一个帖子,里边将Excel的ActiveX中,如何补充注册表的事情,用到了ComRegisterFunctionAttribute 3.8、似乎理论上,不用ComRegisterFunctionAttribute也行,但这可能存在两个风险,一个是不用它复杂度增加,因为通过类本身注册有传入参数Type,带入了一些数据,方便注册表项定位,二是,一般程序去控制注册表,在win7下,非管理员是会被限制权限的 3.9、决定使用ComRegisterFunctionAttribute,研究Registry对象的一些方法,定义注册/反注册的方法,搞定 4.0、使用增加这两个补注册方法的dll,在vs2008下和vs2012下制作的Activex均有效。搞定! 4.1、后注:代码权限问题;定义AllowPartiallyTrustedCallers和AllowPartiallyTrustedCallers未生效时,加载控件在IE上的表现不同,提示插件时,一个在上一个在下
z-sen 2016-05-27
  • 打赏
  • 举报
回复
引用 楼主 chenqu6721 的回复:
C#开发ActiveX求助... 引用了一个第三方的dll,编译通过了。安装包制作安装,通过ie调用的时候调用ActiveX没有引用到第三方dll的方法都可以正常使用,引用到第三方dll的方法调用都没反应,感觉是第三方dll没有加载到,但是我dll跟ActiveX放的同个目录,网上找了好多方法,试过把第三方dll复制到windows、system32、浏览器根目录下都没有用。请高手指点.
有具体的代码吗?我参考下
RubenLuLu 2016-05-27
  • 打赏
  • 举报
回复
注册全局的DLL 写ActiveX的时候用动态引用之类的 都可以解决.... 以前碰到过 死活的调用不到..嘿嘿嘿嘿... 我后来写动态引用解决的....在系统程序的资源目录里把DLL放在那儿....然后ActiveX去引用的.... 嗯...

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧