VS2008制作ActiveX,并打包为CAB(4)
来源:互联网 发布:谷歌程序员年薪三百万 编辑:程序博客网 时间:2024/06/05 09:25
这一节将测试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了!
现在提供经过测试的例子下载: 例子下载
如果你有其它问题,可以留言或发邮件给我。
转自:http://blog.bossma.cn/dotnet/visual-studio-2008-csharp-activex-summary-4/
- VS2008制作ActiveX,并打包为CAB(4)
- VS2008制作ActiveX,并打包为CAB(1)
- VS2008制作ActiveX,并打包为CAB(2)
- VS2008制作ActiveX,并打包为CAB(3)
- vs2008 使用c#写Activex插件,并在website中使用加载,并将cab制作为数字签名
- vs2008 使用c#写Activex插件,并在website中使用加载,并将cab制作为数字签名
- VS2008 ActiveX IObjectSavety IExpress打包cab,发布
- VS2008 ACtivex 制作CAB带 Vcredist_x86.exe 方案
- ActiveX CAB文件打包
- 使用C#开发ActiveX控件,并打包cab应用于web
- ATL Activex 插件打包成cab并簽名
- ActiveX控件打包CAB文件
- 打包制作cab文件
- vs2008下面制作activex
- C#开发ActiveX控件及CAB打包
- 制作activex控件cab的方法
- 制作Cab包,签名发布ActiveX
- VS 2010 开发 ActiveX 制作 cab 包
- RedHat Linux 9.0 安装教程(全程图解)
- 关于 XML 的一些基础知识
- Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- VS2008制作ActiveX,并打包为CAB(3)
- oracle的UTL_mail与任务调度详细分析实例
- VS2008制作ActiveX,并打包为CAB(4)
- groovy安装及一些特性思考
- Metasploit安裝時要注意的幾個問題
- Android 强大的JSON助手 GSON
- qt应用程序向arm板上移植中文不能正确显示的解决办法
- JNI技术实践小结--原理分析和详细步骤截图说明
- 解决文件提示: /bin/ksh^M: bad interpreter: bad interpreter:No such file or directory
- [ECSide文档] ECSide基于数据库的分页、排序、过滤的实现
- android 配置环境变量