`

总结vb activex制作、打包、签名、发布

 
阅读更多


 
订阅

制作vb activex:

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

修改版本

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

'write by pengzhenglin

'2009-03-26

'功能:bs中导入等操作之前要选择客户端文件夹,此控件就完成此功能,并返回文件夹名称、文件夹所有文件名字和文件总数

Option Explicit

Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (LpBrowseInfo As BROWSEINFO) As Long

Private Declare Function SHGetPathFromIDlist Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long

Private Type BROWSEINFO

  hOwner As Long

  pidlroot As Long

  pszDisplayName As String

  lpszTitle As String

  ulFlags As Long

  lpfn As Long

  lparam As Long

  iImage As Long

End Type

Dim rootpath As String  '选择文件夹

Dim cnt As Long '文件总数

Dim files() As String   '所有文件名

Private Function GetFolder(ByVal hWnd As Long, Optional Title As String) As String

    Dim bi As BROWSEINFO

    Dim pidl As Long

    Dim folder As String

    folder = Space(255)

With bi

   If IsNumeric(hWnd) Then .hOwner = hWnd

   .ulFlags = 1

   .pidlroot = 0

   If Title <> "" Then

      .lpszTitle = Title & Chr$(0)

   Else

      .lpszTitle = "选择目录" & Chr$(0)

    End If

End With

pidl = SHBrowseForFolder(bi)

If SHGetPathFromIDlist(ByVal pidl, ByVal folder) Then

    GetFolder = Left(folder, InStr(folder, Chr$(0)) - 1)

Else

    GetFolder = ""

End If

End Function

 

Private Function TreeSearch(ByVal sPath As String, ByVal sFileSpec As String, sFiles() As String) As Long

    Static lngFiles As Long '文件数目

    Dim sDir As String

    Dim sSubDirs() As String '存放子目录名称

    Dim lngIndex As Long

    Dim lngTemp&

    If Right(sPath, 1) <> "\" Then sPath = sPath & "\"

    sDir = Dir(sPath & sFileSpec)

   '获得当前目录下文件名和数目

    Do While Len(sDir)

      lngFiles = lngFiles + 1

      ReDim Preserve sFiles(1 To lngFiles)

      sFiles(lngFiles) = sPath & sDir

      sDir = Dir

    Loop

   '获得当前目录下的子目录名称

    lngIndex = 0

    sDir = Dir(sPath & "*.*", vbDirectory)

    Do While Len(sDir)

      If Left(sDir, 1) <> "." And Left(sDir, 1) <> ".." Then '' 跳过当前的目录及上层目录

     '找出子目录名

        If GetAttr(sPath & sDir) And vbDirectory Then

          lngIndex = lngIndex + 1

         '保存子目录名

          ReDim Preserve sSubDirs(1 To lngIndex)

          sSubDirs(lngIndex) = sPath & sDir & "\"

        End If

      End If

      sDir = Dir

    Loop

    For lngTemp = 1 To lngIndex

      '查找每一个子目录下文件,这里利用了递归

      Call TreeSearch(sSubDirs(lngTemp), sFileSpec, sFiles())

    Next lngTemp

    TreeSearch = lngFiles

  End Function

 

'弹出对话框

'返回选择文件夹路径

Public Function showDlg() As String

    showDlg = ""

    Dim str() As String

    rootpath = ""

    cnt = 0

 

    rootpath = GetFolder(0, "请选择上传文件夹:")

 

    If rootpath <> "" Then

        Call TreeSearch(rootpath, "*.*", str)

 

        Dim i As Integer

        Dim j As Integer

        j = 0

        Dim strall As String

        For i = 1 To UBound(str)

            If str(i) <> "" Then

                'MsgBox str(i)

                j = j + 1

            End If

        Next

 

        cnt = j '记录文件总数

 

        ReDim Preserve files(1 To cnt)  '重新分配空间

 

        j = 0

        For i = 1 To UBound(str)

            If str(i) <> "" Then

                'MsgBox str(i)

                j = j + 1

                files(j) = str(i)

            End If

        Next

 

        showDlg = rootpath

    Else

        showDlg = ""

    End If

 

End Function

'得到文件夹下文件总数

Public Function getFilesCount() As Long

    getFilesCount = cnt

End Function

'得到选择的文件夹路径

Public Function getSelectedPath() As String

    getSelectedPath = rootpath

End Function

'得到所有文件名

Public Function getAllFiles() As String()

    getAllFiles = files

End Function

'得到第i个文件名

Public Function getFile(i As Long) As String

    If i > 0 And i <= cnt Then

        getFile = files(i)

    Else

        getFile = ""

    End If

End Function

''示例或测试代码

'Private Sub Command1_Click()

'    Dim root As String

'    root = showDlg()

'

'    Dim count As Long

'    count = getFilesCount()

'    Dim s() As String

'    ReDim Preserve s(1 To count)

'    s = getAllFiles()

'    Dim i As Long

'    For i = 1 To count

'        MsgBox s(i)

'    Next

'End Sub

生成dll,builed outputs:

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

 

 

 

 第二步,打包:

利用vb6自带的打包工具PDCMDLN.EXE

选择activex工程

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

 点package

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

 点next

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

 选择Internet Package,点next

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

选择存放位置,点next

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

勾选你的activex,其他的不要勾选,点next

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

选择include in this cab,点next

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

选择两个yes,点next,finish。

这样就打好包了,生成了几个文件如下:

  总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

这种方式打包和自己使用命令【在运行中输入iexpress.exe,可以打包cab】打包一样的,但后者要自己书写inf文件,有点麻烦。

我们可以查看自动生成的inf文件

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

另外一个自动生成的网页文件是帮助我们在网页中使用这个activex控件。

<HTML>

<HEAD>

<TITLE>dirselectx.CAB</TITLE>

</HEAD>

<BODY>

<OBJECT ID="dirselectclass"

CLASSID="CLSID:0C5B1166-FEFB-42D3-B517-C579A7A2BB42"

CODEBASE="dirselectx.CAB#version=1,0,0,0">

</OBJECT>

</BODY>

</HTML>

 

数字签名:

利用几个工具对我们的activex签名:

给 .cab 文件签名

在命令行输入:

1. setreg 1 true

2. makecert newCert.cer -sv privatekey.pvk -n CN=CSUGISLink,E=pengzhenglin@163.com,O=Link"

生成 newCert.cer 和 privatekey.pvk 两个文件

3. Cert2Spc newCert.cer newCert.spc

4. signtool signwizard

有图形界面的签名向导,按提示指定有关文件路径即可,其中的描述是控件的描述。

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

浏览我们的cab文件,下一步:

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

选择典型,这样可以选择自己的证书等,点下一步:

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

从文件中选择你上几步生成的证书,点下一步:

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

浏览上几步生成的私钥文件,点下一步:

输入key【在生成密钥时使用的key】

总结vb activex制作、打包、签名、发布  - 飞翔 - 梦随风起...

选择算法md5,点下一步:

点下一步,下一步,一直到完成。

这样我们就得到了签了名的activex了。

 

 

最后一步,发布:

我们在asp.net上发布,用vs2005新建一个asp.net应用程序。

修改项目属性中的生成到iis,创建虚拟路径,这样在iis上发布。

修改default.aspx代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="dirselectxtestweb._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>dirselectx测试网页</title>

</head>

<body>

        <font face = arial size = 1><OBJECT id = "dirselect1" name = "dirselect1"  CLASSID="CLSID:0C5B1166-FEFB-42D3-B517-C579A7A2BB42" CODEBASE="dirselectx.CAB#version=1,0,0,0">

        </OBJECT>

        </font> 

    <form name = "frm" id = "frm" runat=server>

        <input type=text id="backserverstr" name="backserverstr" value=""  runat=server style="display:none;">   

        <input type =submit value = "选择文件夹" onClick ="doScript(); ">

        <asp:Label ID="Label1" runat="server" Text=""></asp:Label>

 

    </form>

</body>

<script language = "javascript">

function doScript()

{

    //调用对话框,返回选择文件夹路径,或者空值

 var t = dirselect1.showDlg();

 //alert(t);

 if(t!="")

 {

  var i=1;

  //该文件夹下总共有文件数

  var cnt = dirselect1.GetFilesCount();

  alert(cnt);  

 

  //var array = new Array(cnt);

        var allstr = "";

  for(i;i<=cnt;i++)

  {

      //得到第i个文件名

   var str = dirselect1.GetFile(i);

   //alert(str);

   if(i==1)

   {

       allstr = str;

   }

   else

   {

       allstr = allstr + "*" + str;

   }

  }

 

  //通过表单回传到服务器

  document.all.backserverstr.value = allstr;

  //alert("OK");

 } 

}

</script>

</html>

在后台加入如下代码,测试选择文件夹后回传到服务器处理了:

protected void Page_Load(object sender, EventArgs e)

        {

            if (IsPostBack)

            {

                Label1.Text = backserverstr.Value;

            }

        }

 

然后将签名后的cab文件放到我们的虚拟路径下面,这样做是因为我们在html中写了一段代码,codebase属性,如果客户端没有安装activex控件,则在这个地址下载安装。

生成。

这样就发布了。

 

在客户端访问的时候可能会遇到页面阻止了安装activex的情况,主要是我们的签名只是个测试签名。

有几个办法解决:

修改internet选项中安全级别,自定义安全级别中将下载未签名的activex等项选择“提示”;

将这个站点设置为信任站点;

 

测试后,可以运行。前几天用C#写的activex控件在客户端要安装.net framework,当下载安装组件的时候,其会自动安装.net framework,不过这样要等上几分钟,这是客户不愿意看到的。

 

分享到:
评论

相关推荐

    vb打包Activex工具打包下载

    "vb打包Activex工具打包下载"这个标题暗示了我们讨论的是一个专门针对VB ActiveX控件打包的工具集合。ActiveX是微软提出的一种技术,用于创建和共享可以在多种应用程序之间交互的组件,尤其是在Web应用程序中。 ...

    VB制作CAB包详述

    VB制作CAB包是一个实用的技巧,特别是在需要向用户分发ActiveX控件时。通过了解CAB文件的结构和VB中的MSCompress控件,开发者可以有效地打包和部署这些组件。不过,需要注意的是,随着现代浏览器对ActiveX支持的逐渐...

    54 款很不错的VB ActiveX控件

    VB ActiveX控件是Visual Basic编程环境中的一种重要组件,它们为开发者提供了丰富的用户界面元素和功能,使得在VB应用程序中实现复杂功能变得更加便捷。ActiveX技术是微软在90年代推出的一种组件对象模型(COM),它...

    VB截图Activex

    综上所述,VB截图Activex涉及的技术主要包括:Visual Basic 6的编程,ActiveX控件的开发与应用,Web环境中的控件交互,控件的签名与安全,以及打包和发布流程。通过学习这些知识点,开发者可以创建自己的屏幕截图...

    vb 自带打包代码

    在VB(Visual Basic)开发环境中,打包代码是一个重要的步骤,它允许开发者将应用程序及其依赖项组合成一个可执行文件或安装程序,以便用户能够轻松地在他们的计算机上安装和运行。VB自带的打包功能,主要指的是...

    VB6.0元件开发指南

    7. **发布与部署**:讨论控件的打包、签名和部署策略,使用户能够方便地在自己的项目中使用这些元件。 此外,提供的压缩包文件《軟體教學》Microsoft Visual Basic 6_0元件程式設計開發指南.chm是该指南的电子版,...

    vs2008开发 activex DEMO

    打包时可能还需要包含数字签名,以增加安全性。 7. **安全考虑**:由于ActiveX控件可以直接执行代码,因此存在安全风险。在发布前,需要确保控件的安全性,避免恶意代码的注入。 通过这篇博客,开发者可以学习到...

    证书创建签名工具.rar

    首先,我们有"给控件做数字签名之一_将控件打包为Web发布包.png",这一步骤是将你的ActiveX控件准备就绪,以便于通过Web进行分发。控件需要被打包成一个可以被浏览器理解的格式,通常是一个 CAB( Cabinet)文件,...

    ActiveX开发手册

    - **数字签名**:确保控件来自可信的发布者。 - **权限管理**:限制控件访问本地文件系统或其他敏感资源的能力。 - **沙箱执行**:将控件限制在一个隔离的环境中运行,以减少对系统的潜在威胁。 ### 如何开发...

    ActiveX控件开发

    5. **部署发布**:将开发完成的ActiveX控件打包,并提供给最终用户下载安装。 #### 六、常见问题及解决方案 - **兼容性问题**:由于不同版本的操作系统或浏览器之间可能存在差异,因此需要确保控件能够在多种环境...

    VB6 and CAB files_visualbasic6_cab_vb6_

    在VB6项目中,CAB文件通常用于分发ActiveX控件、类型库和其他必需的运行时组件。开发者可以通过使用“资源”对话框将CAB文件添加到项目中,然后在安装过程中,VB6的安装程序会自动处理CAB的部署。这简化了用户端的...

    Visual Graph开发

    4.source目录下是csharp2010、delphi7.0、vb6.0、vc6.0使用Visual Graph ActiveX的示例 5.web目录下是互联网应用中使用的cab文件打包批处理程序 6.lib目录下是若干例子图库 7.demo目录下是若干图形文件的示例 二...

    使用VS2010 C#开发ActiveX控件(上)

    打包并发布ActiveX控件通常包括生成DLL和OCX文件,然后使用诸如`regsvr32`这样的工具在目标机器上注册控件。此外,为了方便用户安装,可能还需要创建一个安装包,如MSI安装程序,该安装包应包括所有必要的文件和注册...

    WEB下的客户端控件(OCX)的开发应用

    5. 创建VB的Standard.EXE工程,利用它调试制作的控件。 6. 编译控件部件,生成.ocx文件。 在创建OCX控件后,需要将其注册到系统中,以便在WEB环境下使用。注册OCX控件可以使用Regsvr32.exe工具,或者创建注册文件,...

    ocx控件开发,完全完整流程。看来包会

    最后,将编译后的OCX文件及相关的DLL文件打包,发布给使用者。如果是用于网页,需要考虑浏览器兼容性和安全性设置。 9. **主键和网页使用**: 标签中的“主键”可能指的是在控件中设置唯一标识,用于区分不同的...

    IE插件相关文档

    4. **签名验证**:为了确保安全,可以对CAB文件进行数字签名,这样用户在安装时可以验证其来源和完整性。 5. **发布CAB文件**:将CAB文件上传到服务器,供用户通过IE浏览器下载和安装。 **三、IE插件的使用** 在...

    ArielColorCtrl_ArialColorControl_

    标题"ArielColorCtrl_ArialColorControl_"涉及到的是一个在Visual Basic 6 (VB6)环境中使用的ActiveX控件,名为ArielColorCtrl。这个控件可能是由开发者为增强应用程序的颜色选择和管理功能而创建的。在VB6中,...

    Capicom接口介绍

    Capicom接口介绍主要涉及到的是微软(MS)提供的一个ActiveX控件,名为Capicom,它主要用于处理证书相关的安全操作,包括证书解析、有效性验证、加密解密、签名和验证等功能。这个控件适用于Windows操作系统,并且支持...

    vbScript帮助手册及编译工具

    总结来说,"vbScript帮助手册及编译工具"这套资源对于想学习vbScript或希望将vbScript脚本打包成可执行程序的开发者非常有用。通过手册深入理解vbScript的语法和应用,结合ScriptCryptor实现代码的加密和编译,能够...

Global site tag (gtag.js) - Google Analytics