你们就救救我吧。。。。。。。。。。。。。关于控件注册。。。

aftravel 2003-10-16 03:38:26
谁有关于控件注册的详细点的资料。。。。。。我的网页上的控件要自动注册新的版本。。 前提条件是不要关闭这个已经有该控件的网页。。。。。。。我该怎么做。。。。分都给你。。。。谢谢提供参考。。。。。。(现在总是提示,程序正在运用,不能进行更新)
http://expert.csdn.net/Expert/topic/2358/2358354.xml?temp=.9775507
...全文
43 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyycyu 2003-10-22
  • 打赏
  • 举报
回复
做cab和数字签名很容易的呀!
最多是你买不起知名ca的证书!
自己做一个呀!
warmchang 2003-10-22
  • 打赏
  • 举报
回复
关于cab包的建立和证书等问题的回答:

为MFC 和 ATL控件创建签署的CAB文件

如果您计划通过Internet销售 MFC控件和ATL 控件,您应该将其打包成签署的小巧(Cabinet -CAB) 文件。签署文件确保用户下载您的控件时源代码是安全的。一个CAB文件包含一个您的控件及其安装信息(比如,都需要哪些动态链接库DLL和OCX一起安装)的压缩版本。

创建和签署CAB文件的工具包含于Visual C++ 5.0 光盘中的 CAB&SIGN 目录下面。 该目录下的公用程序在您安装Visual C++时并不会自动地一起安装,因此您必须将CAB&SIGN 目录下面的内容拷贝到您的硬盘驱动器中。

在签署文件之前,您需要有一个软件出版商证明书(Software Publisher Certificate)。您必须向证书发放机构(Certification Authority)申请自己的证书。利用CAB&SIGN目录下面的工具,您能够创建一个用于测试的测试证明书,但是该证明书不能用于签署发售的代码。有关申请软件出版商证明书的信息,请参考步骤 1 。

下面是创建签署CAB文件的步骤 :

* 1 获得一个软件出版商证明书 (您只需要这一次申请就可以永久使用)
* 2 创建 CAB 文件
* 3 签署您的文件
* 4 将签署过的 CAB文件嵌入一个Web页(可选项)获得一个软件出版商证明书

在签署文件之前,您需要有一个软件出版商证明书(SPC)。为此,您必须向证书发放机构 (Certification Authority)提出申请。在申请过程中,您必须生成一个密匙对,并向证书发放机构提供证明信息,比如说您的名字、地址以及公共密匙。而且,您必须作出具有法律约束力的誓言:您不能也将不会发布您知道或者应该知道其中包含了病毒的软件,或者是恶意破坏用户的机器或代码。

有关如何得到软件出版商证明书更详尽的信息,请参考Signing Code with Microsoft's Authenticode。若要申请该证书,请参考 Digital Certificates for Authenticode ;若要创建一个测试证书来测试签署文件,请参考Making A Test Software Publisher Certificate.

证书发放机构生成一个符合工业标准X.509证书格式(包含版本3扩展)的软件出版商证明书。该证书确定并且包含您的公共密匙,并以证书发放机构存档作为参考,把一个拷贝以电子邮件的方式返回给您。收到该证书之后,您应该在所有要发布的、用私人密匙签署的软件当中,包含一份该证书的拷贝。
获得一个软件出版商证明书

您可以使用Visual C++ 5.0 光盘中CAB&SIGN目录下的 MAKECERT和 CERT2SPC 公用程序,做一个测试软件出版商证明书。注意,该测试软件出版商证明书对真正的软件发布无效,但是能够被用来测试您代码的签署。

比如,要做一个私人密匙文件MYKEY.PVK 和一个公司证书CERT.CER,则运行公用程序MAKECERT,其命令如下:

C:\CAB&SIGN\MAKECERT
-u: MyKey
-n: CN = MySoftwareCompany
-k: MYKEY.PVK CERT.CER

MyKey 是您的密匙名,MySoftwareCompany 是您的公司名。注意公用程序 MAKECERT 在命令行选项中区分大小写,因此您必须使用小写的-u、-n以及-k;-n选项的值必须是大写的CN=。

做一个名为CERT.SPC测试软件出版商证明书,则运行公用程序CERT2SPC,命令如下:

C:\CAB&SIGN\CERT2SPC C:\CAB&SIGN\ROOT.CER CERT.CER CERT.SPC

注意CERT.SPC文件是利用您刚使用MAKECERT创建的CERT.CER文件以及CAB&SIGN目录下面的ROOT.CER文件创建的 。
创建一个 CAB文件

这一部分描述如何创建能在互连网上分派ATL和MFC组件的CAB文件。如果您要了解有关CAB文件的更多信息,请参考Cabinet文件参考书目(File Reference),该文件位于平台软件开发工具包(Platform SDK,包含在Visual C++ 5.0联机文档中)的设置和系统管理服务(Setup and System Management Services)部分的\Setup API\Overview\Cabinet Files目录下面。

创建一个 CAB文件:

* 创建一个INF文件。
* 运行公共例程CABARC(在光盘上的CAB&SIGN目录中)。例如:

C:\CAB&SIGN\CABARC -s 6144
n MYCTL.CAB NEEDED1.DLL NEEDED2.DLL MYCTL.OCX MYCTL.INF

CABARC 创建了一个名为MYCTL.CAB的CAB文件。

您必须在您的源文件(INF、OCX以及DLL文件)目录下面运行CABARC。存档在CAB 文件中的文件需要在命令行列出,次序同它们在INF文件中的完全一致。在上例中,INF文件的列出次序是NEEDED1.DLL,然后是NEEDED2.DLL,最后是MYCTL.OCX。

-s选项为代码签署保留空间。n 命令指定您想创建的是CAB文件。CABARC 命令和选项的说明可以查看,其方式是在命令行键入CABARC:

C:\CAB&SIGN\CABARC

创建一个INF文件

INF文件是一个文本文件,指定运行控件所需要下载或者呈交的文件(比如DLL或者其它OCX)。一个INF 文件就捆绑了CAB压缩文件所有的必须文件。缺省情况下,与现有硬盘中文件版本号相同的文件不被下载。要了解有关INF文件及其选项(包括如何创建独立于平台的INF文件)的详细情况,请参考万维网站Packaging Component Code for Automatic Download,或者参考平台软件开发工具包(Platform SDK,包含在Visual C++ 5.0联机文档中)的设置和系统管理服务(Setup and System Management Services)部分的\Setup API\Overview\INF Files目录下的内容。

作为示例,下面的INF是用来为ATL多边形控件创建一个CAB文件的。您可以通过从Visual C++ 5.0光盘下载ATL POLYGON示例程序来创建POLYGON.DLL,并创建一个最小版本。创建该最小版本另外需要一个DLL即 ATL.DLL。ATL.DLL要先于POLYGON.DLL注册,因此首先把ATL.DLL 放置到INF当中。

; Sample INF file for POLYGON.DLL
[version]
; version signature (same for both NT and Win95) do not remove
signature="$CHICAGO$"
AdvancedINF=2.0

[Add.Code]
polygon.dll=polygon.dll
atl.dll=atl.dll

; needed DLL
[atl.dll]
file-win32-x86=thiscab
FileVersion=2,00,0,7024
DestDir=11
RegisterServer=yes

[polygon.dll]
file-win32-x86=thiscab
clsid={4CBBC676-507F-11D0-B98B-000000000000}
FileVersion=1,0,0,1
RegisterServer=yes
; end of INF file

该INF指定了系统需要安装特定版本的ATL.DLL。如果系统中还没有该文件,则需要从和该INF一起创建的CAB文件下载。"thiscab" 是一个关键字,意指包含该INF的CAB文件。您也可以从网上下载所需要的DLL文件,只要指定一个HTTP 网址即可,绝对路径或者相对路径都可以,比如:

file-win32-x86=http://www.mysite.com/mydir/NEEDED.DLL

关键字"file-win32-x86" 指定平台是 x86。

得到一个文件的版本号的过程是:在Windows NT或者Windows 95 Explorer中右键点击该文件;从弹出列表中选择Properties,然后在接着弹出的对话框中选择版本标签。有时,您可能需要在文件版本中插入一个额外的0 。比如,对话框中显示ATL.DLL的版本号是2.00.7024,在INF文件中则变为2,00,0,7024 。

"DestDir"指的是装载目录或者文件的地址: 11 指定为系统目录 WINDOWS/SYSTEM 或者 WINNT/SYSTEM32; 10 规定为窗口目录、WINDOWS或者WINNT。如果没有指定DestDir(典型情况),则代码从固定的OCCACHE目录装载。

"clsid" 指的是要安装控件的CLSID。

创建 INF文件后,再运行CABARC公用程序(在Visual C++ 5.0光盘上的CAB&SIGN目录中)创建CAB文件。您必须在您的源文件目录下面运行CABARC。存档在CAB 文件中的文件需要在命令行列出,次序同它们在INF文件中完全一致。比如,从上面的INF文件为多边形控件做一个CAB文件,需要使用下面的命令 :

C:\CAB&SIGN\CABARC -s 6144 POLYGON.CAB ATL.DLL POLYGON.DLL POLYGON.INF

该CAB文件包含ATL.DLL和POLYGON.DLL的压缩版本,以及将它们展开到POLYGON.INF 文件所需要的信息。

有关创建一个下载MFC控件的CAB文件的示例,请参考MFC 4.2b Component Download Information.您需要包含在MFC控件中的DLL文件有MSVCRT.DLL,MFC42.DLL以及 OLEPRO32.DLL。
签署一个CAB文件

使用Code Signing Wizard签署一个CAB文件:

* 1. 运行公用程序 SIGNCODE (在Visual C++ 5.0光盘的CAB&SIGN 目录下),启动Code Signing Wizard。

C:\CAB&SIGN\SIGNCODE

* 2. 在Code Signing Wizard对话框当中,点击Next前进到下一页。
* 3. 在您想签署那一个程序? 编辑框中,键入您想签署的CAB文件。
* 4.在您想在证书中使用什么名字? 编辑框中,键入您想在证书中使用的名字。
* 5. 点击Next,前进到下一页。
* 6. 在 您想将该程序签署在哪一个软件开发商证书下面? 编辑框中,键入软件开发商证书(SPC)文件名。
* 7. 在您要在该证书的哪一个文件中查找密码、密匙? 编辑框中,键入私人密匙(PVK)文件名。
* 8. 连续两次点击 Next前进到最后一页。
* 9.点击Sign,签署CAB 文件。您的文件将被数字化签署。

您可以不使用CAB文件直接签署您的DLL和OCX 。CAB文件的好处在于它是压缩的,而且,如果和INF文件一起使用,可以将所有必要代码捆绑在一起。
将签署过的 CAB文件嵌入一个Web页

ATL和MFC控件使用标签嵌入网页。在标签,您需要为该控件指定三个属性 :
ID - 控件名称
CLASSID - 控件的CLSID
CODEBASE - 下载控件的位置。CODEBASE 可以指向许多不同的文件类型。

CODEBASE可以直接指向一个OCX 文件或者DLL文件:
CODEBASE="http://www.mysite.com/mydir/polygon.dll#version=1,0,0,1"

因为这仅仅完成了DLL或OCX文件的下载和安装,任何必要的DLL支持必须已经装载到了客户机上。

如果您在CAB文件中包含了选项版本号,它应该指向要下载的控件。例如,如果POLYGON.DLL有一个版本号1,0,0,1,则CAB文件的版本号也必须是1,0,0,1:
CODEBASE="http://www.mysite.com/mydir/polygon.cab#version=1,0,0,1"

如果您没有包含选项版本号,则不能替换同一个组件(如果它们出现在客户机上的话)的老版本号。
gjd111686 2003-10-21
  • 打赏
  • 举报
回复
以上需要自己打包CAB,还需要数字签名.
有没有没本钱的买卖
lsl7909 2003-10-18
  • 打赏
  • 举报
回复
UP
warmchang 2003-10-18
  • 打赏
  • 举报
回复
在页面文件中使用到控件的地方写上控件的版本号就可以了,IE会根据该版本信息自己决定是否下载新的控件,如:
codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0'

假设你的flash控件版本为3.0,则IE会下载新的5.0版的控件了。
Hanzo 2003-10-18
  • 打赏
  • 举报
回复
gz
microran2000 2003-10-17
  • 打赏
  • 举报
回复
你的组件可以采用3721或者Macromedia注册组件的方式实现版本升级.你应该打开采用这些客户端控件网页的源代码,编写网页代码.比如:
<a href='' target='_blank'><OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' WIDTH=468 HEIGHT=60><PARAM NAME=movie VALUE='/adv/homepage/46860bannerh.swf'> <PARAM NAME=quality VALUE=high> <EMBED src='/adv/homepage/46860bannerh.swf' quality=high border=0 WIDTH=468 HEIGHT=60 TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'></EMBED></OBJECT></a>"

特别注意version=5,0,0,0用于定义定义你的控件的版本.浏览器会根据这个数字进行升级.如果客户端没有安装这个组件或者版本低于这个数字,IE会自动下载这个控件,并给出是否信任的安装提示.所有的版本更新由系统自动完成.如果你的组件正在运行,比如是一个IE组件,没有关系,下载安装后,重新启动IE或者系统,该组件的新版本会自动生效.关键在于你如何生成自己的CAB压缩包.在MSDN中对于如何生成这个包有着详细的说明,你可以搜索CABARC VERSION等关键字查找相应文档.
xiaohyy 2003-10-16
  • 打赏
  • 举报
回复
Activex都是自注册的。调用组件的全局函数

DllRegisterServer
gjd111686 2003-10-16
  • 打赏
  • 举报
回复
自己写个注册函数不就行乐.
typedef DWORD(CALLBACK * PREG)(void);

void CRegOCXDlg::OnReg()
{
// TODO: Add your control notification handler code here
TCHAR AppFullPath[_MAX_PATH];
GetModuleFileName(NULL,AppFullPath,_MAX_PATH);
CString m_AppPath;
m_AppPath=AppFullPath;
int iAppPosition;
iAppPosition=m_AppPath.ReverseFind('\\');
m_AppPath=m_AppPath.Mid(0,iAppPosition+1);
char pOCXPath[100];
PREG lpDllEntryPoint;
HINSTANCE hLib;
CString m_OCXFileName;
if(m_OcxList.GetCurSel()==CB_ERR)
{
m_OCXFileName="NULL";
(CButton*)GetDlgItem(IDC_REG)->EnableWindow(FALSE);
}
else
{
m_OcxList.GetLBText(m_OcxList.GetCurSel(),m_OCXFileName);
(CButton*)GetDlgItem(IDC_REG)->EnableWindow(TRUE);
}
if(m_OCXFileName=="NULL")
{
(CButton*)GetDlgItem(IDC_REG)->EnableWindow(FALSE);
}
else
{
sprintf(pOCXPath,"%s%s",m_AppPath,m_OCXFileName);
hLib=LoadLibrary(pOCXPath);
if(hLib)
{
lpDllEntryPoint=(PREG)GetProcAddress(hLib,_T("DllRegisterServer"));
if(lpDllEntryPoint!=NULL)
{
(*lpDllEntryPoint)();
AfxMessageBox("组件注册初始成功!",MB_ICONINFORMATION);
FreeLibrary(hLib);
}
else
{
AfxMessageBox("组件注册初始失败!",MB_ICONINFORMATION);
}
}
}
}

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧