




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、开发及测试环境:(1)开发环境:VisualStudio2008SP1cabsdk(下载地址:http:/ )E:日坨日坨iHelloBossma+:jHelloBossmaSetup我这里创建了三个项目:(1)HelloBossma项目模板:Windows 窗体控件库(2)HelloBossmaSetup项目模板:安装项目(3)Web:项目模板:ASP.NET 网站3、HelloBossma 项目这个项目用于编写具体的控件,并生成安装文件所需要的(1)添加用户控件:dll。蠢加新膜HelluDdisnu可重用的Window弓窗体控件名称i;卜底曲口比一配.cs(2)设计控件:“HdtoBos
2、smafidiveX心心vHelloBossmaActiveX.csi+起始可起始可iidiaiuiaUIIBIIUIainiuiiBriuiaiEHaianuiBiiiiiaiaiiiiBiiiiidiBiII.II,午配午配bb 或控件实例或控件实例- -1-添加 Panel、GroupBox、Label 控件。NowTime 是一个 Label 控件,用于显示时间。然后在控件对应的代码文件中编写程序:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Drawing;usin
3、gSystem.Data;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Runtime.InteropServices;namespaceHelloBossmaIll类即类即0:模板模板:fl:SVI5U创C#项Web:-WindowsFormsPFPF规码据w w常代数-ReporUngWorkflow制文件9)安装程序类0报表向导勺本地数强库缓存以代码文件囹光标文件忌搔口.同类关系圉数据集百位图文件也样式表因应国程序涔单文件二资源文件总组件类又忤圉报表,本地数据库:程序集信息文件革调试器可视化工具J基于服务的麴据库些类二设置文
4、件画图标文件回文本文件目应用程序配置文件日用户控件z自定义控件当前时间当前时间: :NowTimeIIIGuid 将用作控件的 classidIlllObjectSafety 的是用来标记可安全执行脚本的 ActiveX 控件IllGuid(636B8CE1-7512-464C-B63C-FC75BDCA21DB),ProgId(HelloBossma.HelloBossmaActiveX),ComVisible(true)publicpartialclassHelloBossmaActiveX:UserControl,lObjectSafety(privateconststring_IID_
5、IDispatch=00020400-0000-0000-C000-000000000046;privateconststring_IID_IDispatchEx=a6ef9860-c720-11d0-9337-00a0c90dcaa9;privateconststring_IID_IPersistStorage=0000010A-0000-0000-C000-000000000046;privateconststring_IID_IPersistStream=00000109-0000-0000-C000-000000000046;privateconststring_IID_IPersis
6、tPropertyBag=37D84F60-42CB-11CE-8135-00AA004BB851;privateconstintINTERFACESAFE_FOR_UNTRUSTED_CALLER=0 x00000001;privateconstintINTERFACESAFE_FOR_UNTRUSTED_DATA=0 x00000002;privateconstintS_OK=0;privateconstintE_FAIL=unchecked(int)0 x80004005);privateconstintE_NOINTERFACE=unchecked(int)0 x80004002);p
7、rivatebool_fSafeForScripting=true;privatebool_fSafeForInitializing=true;publicHelloBossmaActiveX()InitializeComponent();IIIIII 设置当前时间IIIIIIpublicvoidSetTime(stringtimeStr)(this.label2.Text=timeStr;)publicintGetInterfaceSafetyOptions(refGuidriid,refintpdwSupportedOptions,refintpdwEnabledOptions)(intR
8、slt=E_FAIL;stringstrGUID=riid.ToString(B);pdwSupportedOptions=INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA;switch(strGUID)(case_IID_IDispatch:case_IID_IDispatchEx:Rslt=S_OK;pdwEnabledOptions=0;if(_fSafeForScripting=true)pdwEnabledOptions=INTERFACESAFE_FOR_UNTRUSTED_CALLER;brea
9、k;case_IID_IPersistStorage:case_IID_IPersistStream:case_IID_IPersistPropertyBag:Rslt=S_OK;pdwEnabledOptions=0;if(_fSafeForInitializing=true)pdwEnabledOptions=INTERFACESAFE_FOR_UNTRUSTED_DATA;break;default:Rslt=E_NOINTERFACE;break;returnRslt;publicintSetInterfaceSafetyOptions(refGuidriid,intdwOptionS
10、etMask,intdwEnabledOptions)intRslt=E_FAIL;stringstrGUID=riid.ToString(B);switch(strGUID)case_IID_IDispatch:case_IID_IDispatchEx:if(dwEnabledOptions&dwOptionSetMask)=INTERFACESAFE_FOR_UNTRUSTED_CALLER)&(_fSafeForScripting=true)Rslt=S_OK;break;case_IID_IPersistStorage:case_IID_IPersistStream:c
11、ase_IID_IPersistPropertyBag:if(dwEnabledOptions&dwOptionSetMask)=INTERFACESAFE_FOR_UNTRUSTED_DATA)&(_fSafeForInitializing=true)Rslt=S_OK;break;default:Rslt=E_NOINTERFACE;break;returnRslt;关于 IObjectSafety 的实现参考了:http:/ Com 互操作注册(4)生成项目,生成这两个文件:HelloBossma.dllHelloBossma.tlb是必须的,否则生成不成功。4、Hell
12、oBossmaSetup 项目这是一个安装项目,用来生成安装程序。(1)在项目上点右键,【添加】-【项目输出】,选择上边的 HelloBossma 项目(2)在安装项目上点右键,属性2J2SJ3平台平台| |木可甬木可甬检出文件名检出文件名( (山:山:包文件包文件(3:压缩压缩:CA0文件大文件大| |乂乂目:目:安装安装URL( (前前feleaseVHelloBossmaSetup.msi| |在安装交件中在安装交件中*I酰化大小酰化大小ZI6无限制无限制C自定义胭自定义胭););|http:/localhostjhellobossima/安装 URL:貌似用于查找应用程序更新,具体看:
13、http: C:WindowsSystem32msiexec.exe添加到安装项目中,然后创建一个快捷方式。在【用户的程序“菜单下边】添加一个文件夹HelloBossma,将快捷方式拖动到这里边。文件系统文件系统(HelloBossmaSetup)=X国目标国目标i工就工就E而文库系统而文库系统名嬴名嬴二二 U U应用程序文件夹曦控怦应用程序文件夹曦控怦后以用后以用户的器户的器序噪单序噪单HelbBossma二二用尸里面用尸里面卦卦Uninstall.exe在卸载控件上点击右键,属性:就就 JS(Name)卸载控件卸载控件Arguments!/xA96986A6-AE32-4B6C-91D&a
14、mp;-97C636BIDescriptionFolderHelfoBossmakon函函ShowCmdvsdscNormalTargetUninstaikeKeTransitiveFalseWarkjngFdder唾用程序文件夹唾用程序文件夹设置 Arguments,就是指定要卸载的程序,后面的 ProductCode 可以这样获得:解决方案资源管理器解决方案资源管理器- -H阂阂hBu即曰即曰,平,平X刀一刀一解决方案解决方案的皿龈亡的皿龈亡A313个项目个项目) )申申 E;,Web田田HeHoBossiTidHelloEossmaSetupit检测到的依赖项检测到的依赖项鼻鼻主输出来自
15、主输出来自HElhElci55rn网网活动活动) )国国Uninstall.exe选中项目,然后鼠标放到右侧的属性”上,就可以看到 ProductCode 了:文件,修改文件名为 Uninstall.exe解决方案资源售旌器解决方案资源售旌器- -解法方案解法方案 耻耻 x7亍亍解决方案生解决方案生啊啊* *CA4(3个项酊个项酊(+1jlE:Web+ +;. .更更HelloBowma- -口口HelloBossniaGetLjp由由L检觊到的侬赖项检觊到的侬赖项展性,有展性,有 X XHeHoBossmaSetup 部署项目属性部署项目属性回到庖B杂项AddRemovePragramsko
16、n( (无无) )Author0O5SMADescriptionDetectNewerlnslalledVersionTrueIntallANUsersFatsKeywordsLocalizationChinese(Simplified)ManufacturerBOSSMAMenuF班班turerLHPostBuildEventPreBuildEvertProductcodeA96986As由由E32-4E6匚匚-94D吕吕-97匚匚8663蜀蜀PraductNameHelloBossma5etupftemavePreviousVersionsFalse(4)最后生成项目5、制作 CAB 文件
17、(1)为了方便操作,可以将 CABARC.EXE 添加到环境变量中:桌面上右击我的电脑”,属性“,高级,环境变量”,系统变量”,找到“Path”,在后边把 CABARC.EXE 所在的路径添加上去,注意用分号隔开新添加的路径。(2)准备好文件install.inf:CAB 安装配置文件HelloBossmaSetup.msi:安装程序文件install.inf 文件的内容:versionsignature=$CHICAGO$AdvancedINF=2.0SetupHookshook1=hook1hooklrun=msiexec.exe/i%EXTRACT_DIR%HelloBossmaSetu
18、p.msi/qnrun:一般只需要修改这个就行了(3)执行 cabarc 命令桌面左下角开始,运行,输入 cmd,打开命令提示符工具,进入准备好的文件的目录,执行命令:cabarcnHelloBossma.cabHelloBossmaSetup.msiinstall.infE:MJenaMlctiueXCABxHaKeCABcabarcnHelloBosna.cabHelloBos&naSetup.ins1installLinfNicrosoftCabinetTool-Uersion1.00-0601C03/18/975CopyrightMicrosoftCo199&-1997
19、.filleightsi*Eserued.CreatinynewcabinetJHelloSo9sna.cabJwithcompressionMgZlP:一一- -addingHeLloBos&naEetup.m&i-addinginstall.infConpletedsuccessfullyE:口 5 心tiuEYCHBxNakeCAB.公游毋在丰公游毋在丰 显示Completedsuccessfully,打开所在目录,就可以看到生成的文件了。6、部署到网站在网站中新建一个目录 hellobossma,将生成的 cab 文件拷贝到里边。新建一个网页,将控件添加到页面:!DOC
20、TYPEhtmlPUBLIC-/W3C/DTDXHTML1.0Transitional/EN/TR/xhtml1/DTD/xhtml1-transitional.dtdhtmlxmlns=/1999/xhtmlscripttype=text/javascriptfunctionSetTime()vard=newDate();varvYear=d.getFullYear();varvMon=d.getMonth()+1;varvDay=d.getDate();varvHour=d.getHours();varvMin=d.getMi
21、nutes();varvSec=d.getSeconds();document.HelloBossma.SetTime(vYear+-+vMon+-+vDay+vHour+:+vMin+:+vSec)ActiveX 控件作为一个 object 添加到页面中, 其 classid 是在编写 HelloBossmaActiveX 类时定义好的 Guid 值, codebase用来指示 cab 安装文件的路径,还可以设置宽度、高度。另外其中文字受页面中字体样式的影响。因为我们的 ActiveX 控件没有签名,所以将测试站点加到点”中,并设置安全级别为低”。茶地 Intranet”中或者何信站本地本地
22、 Intranet, ,葭区域适用于在您的葭区域适用于在您的IiLtran.t上上、 找到的所有网站口找到的所有网站口该区域的安全级别该区域的安全级别&)&)该区域的允许级别:全部该区域的允许级别:全部_ _. .他他. . .- -提供最小的安全措施和警告提示提供最小的安全措施和警告提示一一下载大荽数内容下载大荽数内容,且无提示运行且无提示运行.-.- -可以运行所有的活勖内容可以运行所有的活勖内容 -适用于蛆对信任的站点适用于蛆对信任的站点将所有区域重置为默汝级别国将所有区域重置为默汝级别国) )然后打开浏览器,提示安装,点击安装”,稍等下,效果就出来了:C#如何在 Act
23、iveX 控件中调用 javascript 的函数,这里参考网上的例子介绍两种方法,1、方法Internet:常规常规安全安全I隐私隐私内容内容连接连接I程序程序I高锹高锹I点击按钮,就可以通过 javascript 设置 ActiveX 控件中的时间了。目定义级别目定义级别C).默认蝮别默认蝮别 S)S)虽然代码不一样,但是殊途同归。而且都使用了mshtml。选择要直看的区域的更改安全设置选择要直看的区域的更改安全设置可信站可信站Internt站点卷站点卷) )(1)在 VS 项目中添加 Com 对象引用:MicrosoftHtmlObjectLibrary(mshtml.tlb)I添加引用
24、添加引用,NETCOM| |项目项目| |浏览浏览| |最近最近| |组件名称组件名称类型库版本类型库版本路径路径MicrosoftH323ServiceProvider1LOC:WINDOWSsystenn32h323nnsp.dllMicrosoftHelpDatdServices1,0T,1.0C:PrDgramFilesCommonFilesMicroiMicrosoftHeJpVisuals1.0l.DC:pragramFilesC( (xnmanFilesMicro*IMicrosoFtHTMLObjectLibraryMicrosoftIMAPI2BaseFunctionaryM
25、icrosoftIMAPI2FieSystemIma,MicrosoftInformationCardJEHe!.,.L01,01.0C:WINDOWSsem32lriiapi2.dlC:WITJDOWSsystenn32imapi2F5,dllC:(2) ActiveX 中公将个方法,传递window对象到 ActiveX 中ActiveX 中公开一个方法,接受传递进来的参数/将 window 对象传递进来/Theobj.publicvoidSetHtml(objectobj)html=(mshtml.HTMLWindow2Class)obj;在页面中调用 ActiveX 的公开方法,传递当
26、前 window 对象进去:window.onload=function。document.HelloBossma.SetHtml(this);(3)在 ActiveX 控件中添加一个按钮,当点击这个按钮时,触发页面中的C制作配制作配tiv&K控件实例控件实例- -1当前时间:当前时间:NowTimeCallJavascript点击按钮的方法:/调用页面 Javascriptjavascript。IllIIIIllprivatevoidbutton1_Click(objectsender,EventArgse)(html.execScript(CallByActiveX();,java
27、script);)现在卸载掉原来的 ActiveX 控件,安装新的控件,打开页面,点击按钮,看到如下效果,说明成功。C 制作制作 ActiveX 控控件实例件实例- -1当前时间:当前时间:NowTime显示当前时间显示当前时间| |调用 javascript 时还可以传递参数,这里不做演示了,自己可以试一下。参考:http:lliubiqularticlesl92632.html2、方法二(1)在 VS 项目中添加 Com 对象引用:MicrosoftHtmlObjectLibrary(mshtml.tlb)和第一种方法相同。(2)用 c#实现两个 COM 类,IOleClientSite
28、和 lOleContainerusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceHelloBossmaComImport,Guid(00000118-0000-0000-C000-000000000046),InterfaceType(ComlnterfaceType.InterfacelsIUnknown)publicinterfaceIOleClientSitevoidSaveObject();voidGetMoniker(uin
29、tdwAssign,uintdwWhichMoniker,objectppmk);voidGetContainer(outIOleContainerppContainer);voidShowObject();voidOnShowWindow(boolfShow);voidRequestNewObjectLayout();ComImport,Guid(0000011B-0000-0000-C000-000000000046),InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)publicinterfaceIOleContain
30、er(voidEnumObjects(In,MarshalAs(UnmanagedType.U4)intgrfFlags,Out,MarshalAs(UnmanagedType.LPArray)objectppenum);voidParseDisplayName(In,MarshalAs(UnmanagedType.Interface)objectpbc,MarshalAs(UnmanagedType.BStr)stringpszDisplayName,Out,MarshalAs(UnmanagedType.LPArray)int 口 pchEaten,Out,MarshalAs(Unmana
31、gedType.LPArray)objectppmkOut);voidLockContainer(In,MarshalAs(UnmanagedType.I4)intfLock);(3)在 ActiveX 中编写 CallJavascript 方法:III/调用 JavascriptIIIIIIThefilenames.privatevoidCallJavaScript(stringparam)(II 反射获取当前的控件的 ClientSiteTypetypelOleObject=this.GetType().GetInterface(IOleObject,true);objectoleClie
32、ntSite=typeIOleObject.InvokeMember(GetClientSite,BindingFlags.Instance|BindingFlags.InvokeMethod|BindingFlags.Public,null,this,null);II 获取 ContainerIOleClientSiteoleClientSite2=oleClientSiteasIOleClientSite;IOleContainerpObj;oleClientSite2.GetContainer(outpObj);II 参数数组objectargs=newobject1;args0=par
33、am;II 获取页面的 Script 集合IHTMLDocumentpDoc2=(IHTMLDocument)pObj;objectscript=pDoc2.Script;try(/调用 JavaScript 方法 OnScaned 并传递参数,因为此方法可能并没有在页面中实现,所以要进行异常处理script.GetType().InvokeMember(ShowNowTime,BindingFlags.Instance|BindingFlags.InvokeMethod|BindingFlags.Public,null,script,args);catch点击按钮时的操作:/调用 Javas
34、cript/privatevoidbutton1_Click(objectsender,EventArgse)CallJavaScript(this.label2.Text);(4)网页中的 javascriptfunctionShowNowTime(nowtime)alert(当前时间:+nowtime);卸载原来的 ActiveX 控件,重新安装,实际效果:_C由由H乍乍Activ4(控控件实例件实例门门当前时间当前时间: :2010-53021329CallJavaschpt(2)修改控件,以区别 版本,修改 V1.0.0 为 V1.0.1殍豆殍豆; ;媪餐控件实例二证媪
35、餐控件实例二证: :五丁五丁一O!9当前时间当前时间: :NwTime显示当前时间显示当前时间1、更新 ActiveX 的版本:(1)在 ActiveX 项目上点右键,属性,应用程序,程序集信息,最初的版本是修改为 CallJavascript(3)然后重新生成。2、修改安装程序(1)添加注册表项在项目上点右键,视图,注册表:叫叫I0bject5aFety.es也也IQkClIertMteq.J主输出主输出WLlninit文件系文件系堀堀E)重新生成重新生成( (日日视图视图文件类型文件类型用户界面用户界面(5(5自定义操作自定义操作(0启动条件启动条件(U添加添加
36、(Q)安装安装卸载侬卸载侬翦切翦切移移除仍重命除仍重命名名 ( ( 由 慝由 慝性性 在 HKEY_CLASSES_ROOT 下创建 CLSID/ActiveX 的 GUID/InstalledVersion/在 InstalledVersion 下新建字符串值,修改字符串的值为”1,0,1,0,注意:删除名称中的值,自动会显示“默认值)”,这样才能设置注册表中默认值,不要自己输入默认值”。妗妗目标计篁机上的注册表目标计篁机上的注册表= = -_jHKE_CLAS5E5_ROOTj山山口口CglD:-;啊啊E卜卜了了“W.464C-B$3C. .吁吁75BX42EDp1UInstoltedVe
37、rsion名称名称时冢认(2)修改安装程序版本1属性属性二二XHelloBossmaSctup部署项目屋性部署项目屋性H杂QAddRefncveProgramsIcon(无)(无)AuthorBOS5MADescriptionDetectNetverlnstaltedVersionTrueInstallAIlLfsersFalseKey网d号LocadizdtionChineseSimplified)ManufacturerBO5SWAManufacturerUrlPostBuiHEventPreBuildEwentProductCodelDBD6F4-SEE7-4a9F-G3OD-10A0F
38、027B8ProductNameHelloBossmaSetupRemovePreviausVefsioneTrueRunPostBuildEvent成功生成时成功生成时Searchpath5djjed:SupportPhoneSupportUrlTargetPl5tForm熠熠6TitleHellaBossmaSetupUpgradeCcide2ED0FA14-FAFa-4EBO-8540-972Al523D1Version1,0,0修改 Version 为1.0.1,修改 RemovePreviousVersions 为True。(3)重新生成安装程序3、重新制作 CAB 安装包cabar
39、cnHelloBossma.cabHelloBossmaSetup.msiinstall.inf4、修改网站(1)将生成的 CAB 安装包替换原来的安装包。(2)修改页面控件版本5、最终效果刷新页面,提示安装新的版本,直接安装就好了。厂厂C常常I作作Act加加X控件定例控件定例.VI。当前叶间:当前叶间:20106612:35:54显示当前时间显示当前时间测试 ActiveX 控件在新版操作系统上运行的问题,并提出解决的办法。主要是 ActiveX 程序兼容性和CAB 文件的安装问题。我在 VitualPC 上安装了 Windows7,并且使用 IE8 浏览器。1、测试环境:Windows7+
40、IE8出错行:document.HelloBossma.SetTime(vYear+-+vMon+-+vDay+”+vHour+“:”+vMin+“:”+vSec)然后到控制面中没有找到安装的 ActiveX 程序,结合出错行,大致得出结论:ActiveX 没有安装成功!3、修改文件install.inf:versionCallJavascriptX12、修改之前,直接访问页面看看,发现出错了:显示当前时signature=$CHICAGO$AdvancedINF=2.0SetupHookshook1=hook1DeploymentInstallScope=machinehook1run=%EXTRACT_DIR%run.bat新加Deployment,关于这个项目看:http: 我这里只能用这个,改成 user 无法安装成功,原因未知。另外在 vista 以后的版本只能执行 cab 中的文件了,所以 msiexec 转移到了 bat 中执行,添加一个 bat文件。run.bat:setCURDIR=%cd%msiexec.exe/i%CURDIR%HelloBossmaSetup.msi/qn4、制作 CAB 包重新制作 CAB 包,添加一个 run.bat:cabarcnHelloBossma.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学五年级学生国旗下演讲稿《夏至的悄悄话》
- 学校学生会秘书部工作总结模版
- 学校读书活动总结模版
- 工行撤销委托协议
- 客服年终总结模版
- 学前儿童发展 课件 第2章 胎儿的发育与出生
- 反比例函数知识点总结模版
- 铜川市重点中学2025届八年级数学第二学期期末学业水平测试模拟试题含解析
- 勾股定理思维导图+题型总结模版
- 室性心律失常的临床护理
- 2025年安徽马鞍山博望港华燃气有限公司招聘笔试参考题库附带答案详解
- 浙江开放大学2025年《社区治理》形考任务1-3答案
- 广告项目方案投标文件(技术方案)
- 脑梗死三基试题及答案
- 浙江省钱塘联盟2024-2025学年高二下学期期中联考试题 地理 含答案
- 万寿菊提取物项目运营方案【参考范文】
- 07北工大高数工2期末考试A卷工答案1
- 安全教育零食大PK(课堂PPT)
- 译林版六下英语3-6四会词归类复习
- 协和医院老年综合评估表
- GB_T 15109-2021 白酒工业术语(高清-现行)
评论
0/150
提交评论