如何制作一个ActiveX控件,并注册和发布,用于web上!(2)

来源:互联网 发布:js 比较数值相等 编辑:程序博客网 时间:2024/06/02 09:57
我们在Demo中加入ShowMessage方法:
public void ShowMessage(string msg)
{
if(msg != null)
{
MessageBox.Show(msg);
}
}

我们重新编译。在重新访问页面之前,我们先来修改html代码:
<body bgcolor=’#223344’>
<object id="helloworld"
classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" Width="184" Height="96"
>
</object>
<br>
<input type=’button’ onclick=’helloworld.ShowMessage(“Hello World!”)’ value=’Click’>
</body>


现在,重新访问http://localhost/helloworld.htm,单击Click按钮,应该可以实现交互了。

但是结果却很遗憾,我们发现IE跳出了对话框,如图所示

单击确定之后,我们发现JS报错。根据提示,我们判断可以通过修改IE的设置使控件运行。打开IE的 工具——〉Internet选项——〉安全——〉本地Intranet——〉自定义级别——〉对没有标记为安全的ActiveX控件进行初始化和运行,将其值设为启用。我们刷新页面,现在终于可以正确运行了。

当然,我们不能指望我们的客户和我们一样修改这个值。毕竟,一是操作麻烦,二是给电脑带来了很大的安全风险。在互联网上搜索之后,发现必须要实现IObjectSafety接口,把ActiveX控件标记为安全的ActiveX控件。在搜索MSDN之后,我找到了IObjectSafety接口的定义。这就好办了。首先我们自己用C#实现这个接口:

[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
// methods
void GetInterfacceSafyOptions(
System.Int32 riid,
out System.Int32 pdwSupportedOptions,
out System.Int32 pdwEnabledOptions);
void SetInterfaceSafetyOptions(
System.Int32 riid,
System.Int32 dwOptionsSetMask,
System.Int32 dwEnabledOptions);
}


注意,这个GUID是不能改的。然后,我们在Demo类里面实现这个接口。增加一下代码:


IObjectSafety 成员#region IObjectSafety 成员

public void GetInterfacceSafyOptions(Int32 riid, out Int32 pdwSupportedOptions, out Int32 pdwEnabledOptions)
{
// TODO: 添加 WebCamControl.GetInterfacceSafyOptions 实现
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}

public void SetInterfaceSafetyOptions(Int32 riid, Int32 dwOptionsSetMask, Int32 dwEnabledOptions)
{
// TODO: 添加 WebCamControl.SetInterfaceSafetyOptions 实现
}

#endregion


重新编译,然后将IE里面的设置改回来。现在,我们发现,和JS的交互已经没有问题了。
在前面我们已经完成了ActiveX控件的开发,接下来的就是发布它了。

首先,我们建立一个windows安装项目,并将ActiveX控件的主输出添加到项目输出中。然后,改动ActiveX控件的主输出文件,将其Register属性改为vsdrpCOM.如图:
下一步,我们改动项目属性,将引导程序更改为 Web引导程序。很遗憾的是,在 Web引导程序设置 中的安装文件夹URL中必须使用绝对路径,不能使用相对路径。这意味着生成安装程序的时候就必须确定路径,不是很方便。在示例中,我使用了localhost,在发布中可以改为实际的域名。
现在我们生成安装程序,并把相应得程序拷贝到正确的目录中(本例中为默认网站目录下的ActiveX文件夹中)。我们可以直接执行Setup.Exe文件,以验证安装文件的正确性。在我的机器上正确执行了,成功了!
现在我们又要重新改动helloworld.htm文件了。修改后的结果如下:
<body bgcolor='#223344'>
<object id="helloworld"
classid="clsid:9551B223-6188-4387-B293-C7D9D8173E3A" Width="184" Height="96" codebase="ActiveX/Setup.Exe"
>
</object>
<br>
<input type='button' onclick='helloworld.ShowMessage("Hello World!")' value='Click'>
</body>
注意,我们在object块中加入了codebase属性,这就是制定的下载控件的位置,可以使用相对路径。别忙,我们现在还不能正确请求这个页面,因为我们还没有对我们的控件进行签名。签名可以采用两种方式,一种是在上面生成安装程序的时候签名,另一种是使用sn.exe签名。推荐大家使用后者,因为可以提供更多选项。本人很懒,就不多写了,大家可以参考csdn上的文章《发布ActiveX》。先给给大家提
(wubala):我在多说一句如果大家著作的active控件是在winform下制作的,下载完控件后如果客户端没有.net框架,那么还得装上,可以作打包是就装上,应该实现的是先判断有没有.net没有就下载.net框架,有就不下载。这样作:下载PluginInstaller.msi装上,点项目的视图找“启动条件”,.NET Framework的属性中的InstallUl的属性改为:http://localhost/ActiveX/donet.exe
donet.exe为.net框架
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 打工要不到工资怎么办 导师回复跟敷衍怎么办 在演讲时紧张怎么办 老房子怎么办不动产证 脚角质层厚粗糙怎么办 皮革包染色了怎么办 皮革包被染色了怎么办 面膜泥干了怎么办 淘宝店铺生意不好怎么办 淘宝商品换主图被下架了怎么办 壁纸店没生意怎么办 支付宝不能借钱怎么办 淘宝号想注销怎么办 被陌生号码骚扰怎么办 买家辱骂卖家怎么办 淘宝禁止创建店铺怎么办 闲鱼上买东西被骗了怎么办 恶意买家付款了怎么办 换手机号了淘宝怎么办 旺旺发不了图片怎么办 拼多多买家投诉怎么办 拼多多恶意用户怎么办 淘宝运单号填错了怎么办 淘宝退货卖家不处理怎么办 淘宝长时间不发货怎么办 实体店卖假货怎么办 淘宝店暂停服务怎么办 淘宝直播开始没人怎么办 店铺违规虚假交易怎么办 电视无频道信息怎么办 hdp直播频道丢失怎么办 小红书订单删了怎么办 退款售后删除我怎么办 毛衣袖子肥了怎么办 店面生意不好要怎么办 中国的农民以后怎么办 做到不好的梦怎么办 美瞳线眼睛肿了怎么办 淘宝买家限购怎么办 一楼房屋潮湿怎么办 一楼屋子潮湿怎么办