项目需要使用一些本地控件,所以这几天又折腾把以前的vb拿出来,做一个空间的例子。vb制作控件很简单,这里也不再多说,我开发的控件名称叫做test.ocx发布好,会生成相应的test.cab和test.hmtl测试页面。
我要把这个控件发布的web工程中
1,首先复制cab到web目录下,然后再页面中添加控件信息,如下图,
<!-- 如果这页上的任何控件需要授权,您必须
创建一个授权包文件。 运行 LPK_TOOL.EXE 来创建
要求的 LPK 文件。 LPK_TOOL.EXE 将从 ActiveX SDK 中找到,
http://www.microsoft.com/intdev/sdk/sdk.htm. 如果您有 Visual
Basic 6.0 CD, 您可以在\Tools\LPK_TOOL 目录下找到它。
下面是对象标记的例子:
<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
-->
<OBJECT ID="test"
CLASSID="CLSID:7E0ED402-E1D4-4E40-95C2-FEA17B4FA60E"
CODEBASE="test.CAB#version=1,0,0,1">
</OBJECT>
其中上面注释掉的lpk这段根据他的描述生成了相应的lpk文件,将代码放到jsp页面中,部署。
2,部署后查看测试效果,但是效果不尽如人意,提示“非安全控件”而且也无法安装,这是由于控件没有认证,认证还是需要花钱的,自然不行。
3,只能通过本地注册控件的方式,这样就不需要ie的认证,但是控件提示的信息也是“无法识别的控件”。
4,使用installshield9来制作客户端注册包,具体的不说了只要注意一个个问题。注册控件的脚步
function OnEnd() string szDLL, szReg, szCmd; begin szReg = WINSYSDIR ^ "regsvr32.exe"; szDLL = TARGETDIR ^ "test.ocx"; //如果是MSI工程,可以用INSTALLDIR代替TARGETDIR szCmd = "/s \"" + szDLL + "\""; //增加静默参数s, 增加 \” 防止目录路径含空格的情况。 if (!REMOVEONLY) then LaunchAppAndWait(szReg, szCmd, WAIT); endif; end;
这样注册后,客户端使用就不会有提示,我上面提到了,我自己生成了lpk文件,我也加到页面中了。
<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
</OBJECT>
但是如果加这句虽然控件可以使用,但是总会有安全提示,很影响使用效果。所以暂时把它去掉了。