VS2008制作ActiveX,并打包为CAB(4)

16 篇文章 1 订阅


这一节将测试ActiveX控件在新版操作系统上运行的问题,并提出解决的办法。主要是ActiveX程序兼容性和CAB文件的安装问题。我在Vitual PC上安装了Windows 7,并且使用IE8浏览器。

1、测试环境:Windows 7 + IE8

2、修改之前,直接访问页面看看,发现出错了:

activex summary 1 Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(4)

出错行:document.HelloBossma.SetTime(vYear + “-” + vMon + “-” + vDay + ” ” + vHour + “:” + vMin + “:” + vSec)

然后到控制面中没有找到安装的ActiveX程序,结合出错行,大致得出结论:ActiveX没有安装成功!

3、修改文件

install.inf:

[version]  
signature="$CHICAGO$"  
AdvancedINF=2.0  
[Setup Hooks]  
hook1=hook1  
[Deployment]  
InstallScope=machine  
[hook1]  
run=%EXTRACT_DIR%\run.bat 

新加[Deployment],关于这个项目看:http://msdn.microsoft.com/zh-cn/library/dd433049(en-us,VS.85).aspx

InstallScope=machine 我这里只能用这个,改成user无法安装成功,原因未知。

另外在vista以后的版本只能执行cab中的文件了,所以msiexec转移到了bat中执行,添加一个bat文件。

run.bat:

set CURDIR=%cd%  
msiexec.exe /i "%CURDIR%\HelloBossmaSetup.msi" /qn 


 

4、制作CAB包

重新制作CAB包,添加一个run.bat:

cabarc n HelloBossma.cab HelloBossmaSetup.msi install.inf run.bat 

5、在浏览器安装

输入网址,提示安装,然后出现命令运行框,然后消失。

如果安装成功,会出现控件界面。

activex summary 3 Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(4)

6、一个兼容性问题

这时候会发现,浏览器左下角有javascript错误,同时点击Call Javascript发生异常。

activex summary 2 Visual Studio 2008(c#)开发ActiveX控件及制作CAB包总结(4)

无法将类型为“Systerm._ComObject ”的COM对象强制转换为类类型“mshtml.HTMLWindow2Class”。

在XP、Windows Server 2003中都没有问题,Windows 7上出现问题,可能是权限设置问题。

按照上边的提示,找到出现问题的地方:

Default.aspx:

window.onload = function() {  
            document.HelloBossma.SetHtml(this);  
        }; 


HelloBossmaActiveX.cs

public void SetHtml(object obj)  
        {  
//问题出在这里,类型转换的问题  
            html = (mshtml.HTMLWindow2Class)obj;  
        } 


按照提示,我们可以把它转换为接口试试,在网上找到了HTMLWindow2Class的定义,

public class HTMLWindow2Class : System.__ComObject, MSHTML.IHTMLFramesCollection2, MSHTML.IHTMLWindow2, mshtml.IHTMLWindow3, mshtml.IHTMLWindow4, mshtml.DispHTMLWindow2, mshtml.HTMLWindowEvents_Event, mshtml.HTMLWindowEvents2_Event, mshtml.HTMLWindow2  
{  
} 


经过测试,IHTMLWindow2定义了execScript,所以修改SetHtml为:

private mshtml.IHTMLWindow2 html = null;  
public void SetHtml(object obj)  
        { 
             html = obj as mshtml.IHTMLWindow2;  
        } 


如果你需要其它的方法,换换接口试试。

重新编译,重新安装控件,OK了!

现在提供经过测试的例子下载: 例子下载

如果你有其它问题,可以留言或发邮件给我。

转自:http://blog.bossma.cn/dotnet/visual-studio-2008-csharp-activex-summary-4/
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值