<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    codefans

    導航

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    程序設計鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    怎么發布使用了dll的Activex呢?

    一個嵌入網頁的ActiveX,需要調用兩個dll文件。我把它們打成CAB文件后在客戶端無法注冊。但這個ocx本身是好的,如果將ocx和兩個dll文件拷貝到客戶端,然后手動注冊就沒問題了。  
     
    那怎么發布使用了dll的Activex呢?  
    ---------------------------------------------------------------  
     
    ZT:  
     
    1、如果需要創建cab文件,首先需要Cabarc或者Makecab,它們隨著Cabinet  SDK的安裝就有了,Cabinet  SDK的下載地址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp。  
    Cabarc可以創建、查看或者解出cab里面的文件,而Makecab則只可以用來創建cab文件。  
    2、制作cab文件時需要將所有的相關文件都包含進去,可以通過Depends(VC自帶的)檢查需要的文件。使用inf文件將這些東西都寫進去。  
    3、inf搞法:inf文件描述cab中所有的ocx及dll文件,inf通過一些命名區域來提供需要的信息。  
     
    怎么寫inf  
    最開始一般是[Version]區:  
    eg:  [Version]  
    signature="$XXXX$"  
    AdvancedINF=2.0  
    接下來就是最重要的[Add.Code]區:  
    eg:  [Add.Code]  
    Ctrl1.dll=C1Section  
    Ctrl2.dll=Ctrl2.dll  
    前面是要下載的文件名,后面是對應這個文件的區域名,可以是任何名字,不過一般都是和文件的名字相同,這樣方便維護。還有需要注意是在[Add.Code]區出現的文件要根據依賴性進行排序,例如前面說的ctrl1.dll要依賴于ctrl2.dll,則ctrl2.dll要出現在ctrl1.dll的前面。因為安裝時是按照相反的順序進行的,也就是說先安裝ctrl2.dll,然后才是ctrl1.dll,哧哧,記清楚了,不要搞反了。  
    再接下來是各個文件的區域了  
    [Ctrl1.dll]  
    file-win32-x86=thiscab  
    RegisterServer=yes  
    clsid={.....}  
    DestDir=
    FileVersion=1,0,0,0  
    [Ctrl1.dll]區域中的第一個file值告訴ie到哪里去得到這個dll,file一共包括三個部分,第一部分是file,這個永遠都是這樣的(至少目前來說);第二部分告訴聲明支持的OS,win32表示windows,mac就是蘋果MAC  OX了;第三部分是CPU類型,比如說x86、  ppc  (Power  PC)、  mips或者alpha了。  
    file的值可以取三個一個URL、ignore和thiscab,如果是URL則說明到URL所在的位置去下;如果是ignore說明對于這種OS和CPU,不需要下載這個文件(ctrl1.dll);如果是thiscab很明顯就在當前的cab文件中了。  
    接下來是RegisterServer,可以取兩個值yes和no,如果為yes則說明ie要注冊該dll,如果是no就不必了;  
    再下來是DestDir,它的值是dll將要存到本地硬盤的位置,如果它的值是10,則將dll放到\Windows或者\WinNT下;如果是11,則放到\Windows\System或者  
    \WinNT\System32下;如果是空(就是沒有值)則會放到\Windows或者\WinNT下的Downloaded  Program  Files目錄下;  
    最后是FileVersion,這個就比較明顯了,說明了ctrl1.dll的版本號。  
    有時候我們使用VB來開發控件的時候,需要將VB的虛擬機裝上去,它需要一些其它的說明的,簡單地講一下吧:  
    在[Add.Code]中增加一項MSVBVM60.DLL=MSVBVM60.DLL(以VB6為例)下面是  
    MSVBVM60.DLL區域:  
    [MSVBVM60.DLL]  
    hook=MSVBVM60.cab_Installer  
    FileVersion=6,0,81,76  
    FileVersion很明顯,是版本號,就不再說發,就說說hook吧。  
    hook區域是在安裝的時候需要執行的區域,它分為兩種,一種是有條件的,另外一種是無條件的,無條件的hook區域是必須執行的,反之則根據條件判斷是否執行。以[Setup  Hooks]標記的區域是無條件區域,如下所示  
    [Setup  Hooks]  
    hookname=section-name  
     
    [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  
     
     
    創建一個cab文件:  
    cabarc  N  ctrl1.cab  ctrl1.inf  ctrl1.dll  
    N表示要創建一個新的文件,ctrl1.cab是創建的文件名,ctrl1.inf是cab的inf,后而是需要加到cab里的文件,可以使用通配符。  
    然后就可以將cab文件放到網頁上了  
    <OBJECT  ID="Ctrl1Obj"  
    CLASSID="clsid:....................................."  
    CODEBASE="http://server.com/ctrl1.cab#version=8,0,0,5007">  
    </OBJECT>  
    這里也在一個version,不過這里的version是指控件的version,而inf里的是文件的version。  
     
     
    制作電子簽名:  
    首先從下面的網址下載制作簽名的工具SignCode,地址是  
    http://msdn.microsoft.com/workshop/gallery/tools/authenticode/authcode.asp  
    從簽名授權中心如VeriSign或者你的局域網上運行的Microsoft  Certificate
    Server授權服務器得到一個certificate,在申請授權的過程你會得到一個私鑰。  
    也可以使用MakeCert.exe和Cert2Spc.exe創建的私鑰進行測試,方法是首先使用MakeCert創建一個X.509的certificate(.cer文件)  
    MakeCert  -sv  MyKey.pvk  n  "CN=My  Software  Company"  MyCert.cer  
    然后利用Cert2Spc將.cer文件轉換成為PKCS  #7軟件發布Certificate(.spc文件),  
    Cert2Spc  MyCert.cer  MyCert.spc  
    利用你下載的SignCode對你的cab文件進行電子簽名  
    SignCode  -spc  MyCert.spc  -v  MyKey.pvk  -t  http://  
    timestamp.verisign.com/scripts/timstamp.dll  ctrl1.cab  
    SignCode還可以指定一些其它的參數,就不說了,太長了,哧哧。  
    雖然可以利用測試的.cer和.spc文件,但是在發布的時候,必須申請。  
     
    其實東西在SDK中都有說明,不過都是E文的,慢慢看就沒有什么發  
    ---------------------------------------------------------------  
     
    再補充一點,如果只是測試,你可以SignCode時回車,根據提示一步步往下選,命令行參數又臭又長,還經常出錯,這樣會節省不少你的時間  
    ---------------------------------------------------------------  
     
    這是因為ocx關聯了你的兩個dll,在系統調用ocx中的注冊函數是需要調用你的dll但系統無法找到,所以加載ocx失敗造成注冊失敗  
     
    解決的辦法是在cab的安裝文件里把dll安裝到系統的目錄下,或者動態加載dll,或者指定加載dll的目錄

    posted on 2005-07-27 10:18 春雷的博客 閱讀(755) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲第一成年网站视频| 国产一级片免费看| 国产精品亚洲二区在线| 高清永久免费观看| 色播精品免费小视频| 免费a级黄色毛片| 久久久久亚洲AV无码观看| 国产成人亚洲综合a∨| 国产成人涩涩涩视频在线观看免费 | 亚洲精品A在线观看| 亚洲av伊人久久综合密臀性色| 国产v亚洲v天堂无码网站| avtt天堂网手机版亚洲| eeuss免费影院| 黑人粗长大战亚洲女2021国产精品成人免费视频 | A级毛片内射免费视频| 亚洲无线观看国产精品| 亚洲精品无码你懂的| 国产免费爽爽视频在线观看| 亚洲一区二区三区偷拍女厕| 一个人免费视频观看在线www | 亚洲国产精品无码久久98| 国产成人啪精品视频免费网| 日韩精品视频在线观看免费| 久久久久久99av无码免费网站 | aa在线免费观看| 天堂亚洲免费视频| 亚洲大成色www永久网址| 99精品视频免费在线观看| 亚洲国产精品成人AV无码久久综合影院| 激情亚洲一区国产精品| 日韩毛片无码永久免费看| 亚洲午夜在线播放| 1000部拍拍拍18免费网站| 亚洲an天堂an在线观看| 你懂的在线免费观看| 中文字幕久久亚洲一区| 在线视频亚洲一区| 国产99视频免费精品是看6| 亚洲国产日韩a在线播放| 老司机亚洲精品影视www|