这一节将测试ActiveX控件在新版操作系统上运行的问题,并提出解决的办法。主要是ActiveX程序兼容性和CAB文件的安装问题。我在Vitual PC上安装了Windows 7,并且使用IE8浏览器。
1、测试环境:Windows 7 + IE8
2、修改之前,直接访问页面看看,发现出错了:
出错行: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、在浏览器安装
输入网址,提示安装,然后出现命令运行框,然后消失。
如果安装成功,会出现控件界面。
6、一个兼容性问题
这时候会发现,浏览器左下角有javascript错误,同时点击Call Javascript发生异常。
无法将类型为“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了!
现在提供经过测试的例子下载:?例子下载
如果你有其它问题,可以留言或发邮件给我。
求助!
我按照这个方法做了,现在除了每次访问网页都提示下载安装ActiveX,其他都正常。如何解决这个问题呀?CAB包发上去后,没有改变版本,但是下次访问,仍然提示下载安装。
这可能是安装不正常导致的问题,我现在提供了一个经过测试的例子,你可以看看于你的项目有什么差别。谢谢反馈!
楼主,你分享的东西太给力了。我经过这两天的测试,终于可以下结论了:跟系统和ie都没关系,只要你电脑上安装了netFramework-v3.5,插件就可以运行,相信我没错的。4楼的你的问题应该也是这个。
我按照你说的步骤制作了插件,在ie6和ie7都可以安装,但是在ie8(xp系统)下提示安装但是还是安装不成功,按照你上面的方法修改了还是不行啊,请问怎么办。
@求助
这个方法我是在服务器端执行的。
个人认为不能直接使用:mshtml.IHTMLWindow2;需要转换未知类型为这个接口:
private mshtml.IHTMLWindow2 html = null;
public void SetHtml(object obj)
{
html = obj as mshtml.IHTMLWindow2;
}
ActiveX中公开一个方法,接受传递进来的window对象,转换后执行页面的javascript方法。
html.execScript(“CallByActiveX();”, “javascript”);
execScript是接口IHTMLWindow2的一个方法,在IE8中必须通过这个接口。
您好,您的文章对我有非常大的帮助,我现在遇到一个问题,用mshtml.IHTMLWindow2.exescript()函数时,IE6,7正常,IE8报错,不知道能不能解决呢?非常感谢
我按照文中介绍的方法,在Microsoft Visual Studio 2008中做了一个控件,但在使用过程中发现,在装有Microsoft Visual Studio 2008的两台电脑中使用没问题,但在其他没安装Microsoft Visual Studio 2008而只安装有.net 3.5的客户机不无法运行,显示红色的叉叉,希望大家指点迷经!bossma@yeah.net
非常感谢分享这么详细的经验!
bu cuo
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论