如何将classlibaray (windows control library)打包为activeX安装,js访问

 

1  Classlibaray 注意事项

AssemblyInfo.cs 中更改:

l          [assembly: ComVisible(true)]

l          //[assembly: Guid("98f088b5-bb39-4762-ba3e-1a5acfb91573")]

Class中更改:

l          using System.Runtime.InteropServices;

l          [Guid("98f088b5-bb39-4762-ba3e-1a5acfb91573")]

       public class Class1{……}

项目属性更改

l          Bulid:勾选Register for COM interop

l          Signing: 强命名,可以直接自动生成key文件,后缀 snk,也可以使用sn.exe工具(vs的行命令窗体)

 

2  制作setup注意事项

l          建立setup project

l          右键,view->FileSystem

其中主要文件夹介绍:

ApplicationActiveX安装的文件夹(dll输出)

Global Assembly Cache:gac ;C:/windowns/assembly/

System:安装在C:/Windowns/system32/ (若含有非c#dll,一般放在改文件夹)

l         主输出文件夹属性更改

Register ——>vsdrpCOM,作为com调用

l         项目属性更改

F4

RemoveBeforeVersions 设为true

ProduceName & Title 设为你想要显示的安装名字

编译生成msi,和exe文件,一般使用msi文件,可以在本机安装下,测试是否打包成功。

 

3 制作cab

Cab包实际就是将msi文件和inf文件打成一个mszip

Inf文件在zip包中是直接可视文件

具体的inf包文件的资料,可以搜索msdn,关键字:cabarc,可以查到infcarbarc的基本信息

举个demo

[Add.Code]

SLPActiveX.dll=SLPActiveX.dll(主输出文件的dll,安装在system32,gac中的文件,不用在这标明)

 

[SLPActiveX.dll]

Clsid={a14b1791-4d3a-4bf6-8787-619143e3772d}(和主输出类guid一致)

FileVersion=1,0,0,0

hook=hook1

 

[hook1]

run=msiexec /i  %EXTRACT_DIR%/SLPActiveXSetup.msi /q (是否显示安装文件?没有的话,就是显示)

 

[Version]

; This section is required for compatibility on both Windows 95 and Windows NT.

Signature="$CHICAGO$"

AdvancedInf=2.0

 

Cab包的打包工具,cabarc.exe可以直接在vs的行命令窗体中调用。具体语法参考msdn

语法demo

cabarc n Demo.cab D: /SetUp.msi D: /DemoSetup.inf

打包成Demo.cab

在行命令显示的窗口下

4 javascript调用注意事项

cab包放在网站项目中

l          Html调用ActiveX

       <object id="Object1" classid="clsid:98f088b5-bb39-4762-ba3e-1a5acfb91573" width="600"

                style="height: 233px" codebase="ActiveX/Demo.cab"  viewastext>

        </object>

Classid &codebase是需要特别注明的地方

l          JS调用方法:

 function CallMethod() 

  {  

              var obj = document.getElementById("Object1");                      

obj.TextString; //调用公共属性

                 alert(obj.demo1()); // 调用公共方法

                 alert(obj.demo2(1,"---oooo-----",false)) //int string bool 的参数

  }

测试站点,需要把本机的防火墙软件和微软自带的防火墙关闭,建立iis虚拟站点

同网关内他人的机器上使用Ip访问Demo: http://IP/websitename/

建议使用虚拟机软件VMware,本机就可测试,非常方便。

 

windows control library 打包为 activex

classLibrary最大的区别是,windows control library带有可显示介面,在界面内的可以编辑事件方法,要发布control libarary,步骤和以上一样,只是主项目改为controllibrary。其他引用dll需要添加到安装项目中去.

 

 

 

安装activeX成功后,可以查看下各安装文件夹是否有相应dll

 

项目中遇到的问题:

总是提示,一个非C#dll找不到

原因:可能是这个dll引用的系统dll在该机器上没有,建议使用工具Dependency Walker查看该机上的dll,可以查看该dll引用的其他dll在不在。不存在的逐个添加。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值