










首先声明:client必须安装.net framework.如果怕客户嫌麻烦,那就用VB6orMFC好了.
一.基本步骤:
1.建立winform控件项目
2.在AssemblyInfo.cs中using System.Security,并加入语句[assembly : AllowPartiallyTrustedCallers()],用处是执行安全声明,让控件使用赋予的权限
3.在winform控件类,using System.Runtime.InteropServices,并为类添加Guid.
e.g.[Guid("065308EF-9D2B-4091-8DBE-7D9D03525F42")]
Guid可用工具创建.
4.修改项目属性->生成,为COM Interop注册修改为True.
注意:这里DEBUG和RELEASE生成配置是分开的.别改了DEBUG的然后使用RELEASE方式生成,这 种问题基本很难发现,搞不好就只能坐着哭了.
5.好了,你可以用了
二.与JS实现交互(我没有测试过):
IE的安全设置也许会禁止控件交互,你不能指望客户自己改安全设置,所以,要把控件标记为安全控件.
具体方法是实现一个IObjectSafety接口.接口定义如下:
[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);
}
下面是实现该接口的代码:
#region IObjectSafety 成员
public void GetInterfacceSafyOptions(Int32 riid, out Int32
pdwSupportedOptions, out Int32 pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}
public void
SetInterfaceSafetyOptions(Int32 riid, Int32 dwOptionsSetMask, Int32
dwEnabledOptions)
{
}
#endregion
三.发布
用到MakeCert.exe,Cert2Spc.exe,SignCode.exe.这些文件
安装VS的时候已经安装.不知道位置,可以使用windows的搜索功能.
首先,利用MakeCert生成一个
证书cer和一个私匙pvk.
MakeCert -sv MyKey.pvk n "CN=My Software
Company" MyCert.cer
然后,用Cert2Spc将.cer文件转换成为PKCS
#7软件发布Certificate(.spc文件)
Cert2Spc MyCert.cer
MyCert.spc
最后,用SignCode,按着提示操作对文件进行数字签名(cab,msi,exe,这些文件是你事先打好
的包)(dll的还没有测试,明天测试吧)
提示:cab包可使用system32目录下的iexpress.exe工具打包
真正需要发布的时候,要从签名授权中心申请,并得到私匙.
四.使用
<OBJECT ID="myobj"
CLASSID="clsid:....................................."
CODEBASE="http://server.com/ctrl1.cab#version=8,0,0,5007">
</OBJECT>
说明:
ID:唯一标识.JS交互时可
用.e.g.onclick="myobj.publicmethod1();"
CLASSID:控件的系统标识.clsid:开
头,其后内容可用GUID,也可用文件名#命名空间.控件类名
CODEBASE:下载地址#版本号.版本号用于自动更新.
我测试的时候TM就搞不懂
下载的CAB包就是装不上
做成EXE的时候会安装到添家删除程序里,不爽,更新升级也麻烦
直接使用DLL时用GUID又调用不出来
娘那个腿的.明天测试DLL文件签名,切记切记
附:INF的写法
[section-name]
run=%EXTRACT_DIR%\setup.exe
无条件区域常用来通过一个inf文件执行一个安装程序,这就是我们在资源管理器右键点击一个inf文件时在执行安装这样的菜单的原
因了
当ie下载了一个cab文件,如果文件中没有[Add.Code],则处理[Setup
Hooks]区域,运行run所指定程序,哧哧,上面就是setup.exe;
条件区域则为在一定条件下执行,前面为MSVBVM60.DLL指定的hook区域就是一个条件区域,如果在
MSVBVM60.DLL指定的CLSID或者version不能满足需要而且没有file这个命名值,则执行hook所指定的区域。
[MSVBVM60.cab_Installer]
file-win32-x86=http://activex.microsoft.com/controls/vb6/VBRun60.cab
run=%EXTRACT_DIR%\VBRun60.exe
上面[MSVBVM60.cab_Installer]是一个hook区域,它也包含了一个file值,指定一个URL,表示
MSVBVM60.DLL可以从这个URL下载得到;run则说明了执行哪一个文件
这里有必要说明一下的是,MS对一些常用的Redistributable Microsoft DLLs
可以通过指定CODEBASE属性为http://activex.microsoft.com/controls,这样在cab文件中就中需要包含这些文件,在计算机上有一个文件redist.txt上面的dll就是Redistributable
Microsoft
DLLs
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。