• C#实现ActiveX控件开发与部署


    现在,我们手里已经有了这个控件包:QRCode.cab,下面我们编写一个测试的网页

    <html>
    <head>
        <title>无标题页</title>
        <script type="text/javascript" language="javascript"> 
           
            function Test()
            {            
                qrcodeocx.DecodeQRCode("@UEsDBBQAAAAIADWPjj3wRxgnaAAAAKQAAAAIAAAAemlwRW50cnktjdsNAjEQA1uhgJxke1/ZpDVEOTRBcwR0fzOWZVNowLnTlVkxN+1OSCOAH4TJDvwd+zaBuFCX7EFf8hW1P2/KPHITYmOiFypq1qBiMIL2PAHFERgEw1+jCY9WnsrZBc8LNcGanXl2vlBLAQIUABQAAAAIADWPjj3wRxgnaAAAAKQAAAAIAAAAAAAAAAAAAAAAAAAAAAB6aXBFbnRyeVBLBQYAAAAAAQABADYAAACOAAAAAAA=#");           
                
                if(qrcodeocx.Flag)
                {
                    alert("成功!返回"+qrcodeocx.Result);
                    document.getElementById("txt").value = qrcodeocx.Result;
                }
                else
                {
                    alert("失败!原因:"+qrcodeocx.ExceptionMsg);
                }
            }
        </script>
    
    </head>
    <body>
        <div>
         <object id="qrcodeocx" codebase="QRCode.cab#version=1,0,0,0" classid="clsid:2865d2a6-9bce-4522-9f39-eddb2887375d"></object>
        </div>
        <input id="Button1" type="button" value="测试" onclick="javascript:Test();" />
        <textarea id ="txt"></textarea>
    </body>
    </html>
    

      

    codebase="QRCode.cab#version=1,0,0,0" 指明了引用控件包的位置和版本(用于控件的升级,后面会讲)

    classid="clsid:2865d2a6-9bce-4522-9f39-eddb2887375d"就是之前我们编写控件时候,控件的guid

    这样我们就可以在本地或者发布到iis上测试一下。

    过程中因为签名等问题有可能会提示安全受限或者无法安装之类的,如果你不想一点一点的调整ie安全设置就直接将站点设置为可信站点,并调低安全级别。

    然后打开浏览器,提示控件安装,点击“安装”

    这样控件就部署安装完成,也就可以使用js调用了。

    但是,如果以后我们的控件需要升级,怎么办呢?如果使用以上介绍的方法进行控件的部署,需要按照下列步骤进行升级工作:

    1、更新Activex的版本:

    (1)在ActiveX项目上点右键,属性,应用程序,程序集信息,最初的版本是1.0.0.0,修改为1.0.1.0

    (2)重新生成。
    2、修改安装程序

    (1)添加注册表项

    在项目上点右键,视图,注册表:

    在HKEY_CLASSES_ROOT下创建CLSID/{ActiveX的GUID}/InstalledVersion/,

    在InstalledVersion下新建字符串值,修改字符串的值为”1,0,1,0″,

    注意:删除名称中的值,自动会显示“(默认值)”,这样才能设置注册表中默认值,不要自己输入“默认值”。

    (2)修改安装程序版本

    修改Version为”1.0.1″,修改RemovePreviousVersions为”True”。

    (3)重新生成安装程序

    3、重新制作CAB安装包

    4、修改网站代码

    (1)将生成的CAB安装包替换原来的安装包。

    (2)修改页面控件版本

    <object id="qrcodeocx" codebase="QRCode.cab#version=1,0,1,0" classid="clsid:2865d2a6-9bce-4522-9f39-eddb2887375d"></object>

    这样当下一次浏览器刷新的时候,就会比较这个版本,并进行相应的升级。这里的升级其实涉及了两部分的是升级,一部分是cab的升级,另一部分是msi的升级,所以这里要了解两组升级比较的概念——更新cab的版本和registry的版本:

    首先說說cab的版本
    cab的版本(即html裏codebase的版本)是會和客戶這兩條registry進行配對
    HKCR/CLSID/{GUID}/InstalledVersion

    HKCU/Software/Classes/{GUID}/InstalledVersion/(Default)
    也就是說,我們需要在安裝msi的時候,在客戶裏寫進這條registry
    方法如下︰
    在ActiveX Setup安装項目點擊右鍵 –> 视图–> 注册表里添加

    生成以後,在安裝msi的時候,regisry便會被寫進客戶的機器
    (請注意,[ComRegisterFunction()]這個方法是不行的,因為安裝msi的時候不會執行)

    例如︰
    請以ActiveX控件的GUID代替以下的GUID,並請保留Registry裏的{}
    Registry: HKCR/CLSID/{GUID}/InstalledVersion/(Default) = “1,2,0,0″
    Html: classid=”clsid:GUID” codebase=”YourProduct.cab#version=1,2,0,0″

    這樣客戶在瀏覽你的網頁時,便會把html裏codebase的版本和Registry的版本進行配對,如html的版本較registry的版本新,便會下載並執行cab檔案

    第二點是msi的版本
    ActiveX Setup項目 –> 属性 –> 版本
    這個版本要比客戶的版本較新,否則在執行msi時便會安裝失敗
    另外,也要把移除上一版本”设置为 true

    以下是這兩項設置的目的︰
    1. html會和客戶的registry的版本進行配對,發現html的版本較客戶的版本新時,便會下載cab
    2. 下載cab後,便會根據inf執行msi or bat檔案,執行msi時,它會自行和上一次安裝的msi版本進行配對,今次的版本較新時,才會繼續安裝

    因此兩者也必須更新
    順帶一提,如果不寫registry,html是配對的對象會變成.net framework的版本,就是2,0,50727那個,暫時還不知原因

    參考:
    cab和registry的配對
    http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/48335861-2434-4058-9809-186a0bd9e320/

    在msi裏添加registry
    http://stackoverflow.com/questions/1506858/how-to-get-com-server-for-excel-written-in-vb-net-installed-and-registered-in-aut

  • 相关阅读:
    UnityShader
    Unity
    Tools
    linux下解压命令
    进程 同步、互斥
    I/O模型
    jclass jobject
    javah javap
    IDA 结构体
    Windows CSRSS API List (NT/2000/XP/2003/Vista/2008/7/2012/8)
  • 原文地址:https://www.cnblogs.com/xiaz/p/4712334.html
Copyright © 2020-2023  润新知