• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            使用INF和OSD文件從Internet下載組件

             

            作為系統(tǒng)服務(wù),IE下載從internet組件通常需要進(jìn)行認(rèn)證和檢查。對(duì)于發(fā)布者,有兩種機(jī)制:

            1、inf文件進(jìn)行發(fā)布

            2、osd文件發(fā)布(ie4及以后版本)

             

            推薦使用cab來將所有需要文件打包,并進(jìn)行簽名。IE收到一個(gè)cab文件后:

            首先查找是否存在OSD文件,如果存在,按照OSD語法(XML文檔)進(jìn)行處理。其中如果涉及到INF文件,還會(huì)打開INF文件進(jìn)行引用。

            如果不存在,會(huì)打開INF文件,按照INF文件進(jìn)行解釋安裝。

             

            CODEBASE       屬性

            internet上發(fā)布組件,極其重要的屬性就是codebase屬性了,因?yàn)榇?/span>url指定了一個(gè)“挑剔”的組件運(yùn)行所需的全部文件從哪兒獲取。

            組件開發(fā)者可以將組件以下列方式打包發(fā)布:

                   。PE格式(.exe .ocx .dll ……),好處是文件就一個(gè)一布操作,但是文件不會(huì)被壓縮,通過http方式下載。

                   。inf文件。此方式僅在瀏覽器安全設(shè)定為低、中時(shí)候才可行,原因在于單一inf文件不可被簽名。Inf的語法可以指向一些多樣性的可執(zhí)行文件。

                   。cab文件。所有需要的文件打包到一個(gè)壓縮文件中,可被簽名。

             

            INF文件格式

            INF語法由Internet下載組件下載并處理。

            所有URL必須被urlencode過,即空格以%20代替,且以codebase=<URL>中的url來作為基址解釋。

            代碼下載器理解其中幾個(gè)主要的節(jié)

            [Add.Code] [Setup Hooks]

            如果者兩個(gè)節(jié)均不存在,那么當(dāng)作標(biāo)準(zhǔn)的win32 inf格式進(jìn)行解釋

             

             Add.Code 節(jié)列出所有將要被安裝的文件,包括可選文件

            [Add.Code]

            filename1=section-name1

            filename2=section-name2

             

            每一個(gè)文件自成一節(jié)(文件節(jié)),并進(jìn)行單獨(dú)描述安裝屬性。

            [section-name1]

            key1=value1

            key2=value2

             

            在一個(gè)文件節(jié)中,以下關(guān)鍵字可用:

            File-%opersys%-%cpu%=[url | ignore | thiscab]

            %opersys% 可以是 [win32 | mac] ,當(dāng)前 %cpu% 可以是 [x86 | ppc | mips | alpha].

             

            File=[url | thiscab]

            指示文件可以在那些地方下載得到。如果沒有設(shè)定值且文件沒有載用戶的計(jì)算機(jī)上,下載失敗。

            FileVersion=a,b,c,d

            文件版本定義

            Clsid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}

            組件的CLSID

            DestDir=[10 | 11]

            DestDir 可以設(shè)定為 10 \windows directory

            11      windows\system directory.

            如果沒有設(shè)定值,則存放在cache目錄中

            RegisterServer=[yes | no]

            是否自行注冊組件,會(huì)覆蓋inf文件中的其他關(guān)于注冊的設(shè)定

            Hook=section-name3

            定義有條件掛鉤。如果 clsid 或者文件的最小版本不匹配且無 File= or File-%opersys%-%cpu%= values 條目,安裝程序會(huì)尋找關(guān)于定制的掛鉤。掛鉤節(jié)如下定義: [section-name3]

            key1=value1

            key2=value2

             

            可以多個(gè)組件都掛同一個(gè)hook.

            以下key可用:

            File-%opersys%-%cpu%=[url | ignore]

            File=[url]

            Run=[cmd-line]

            cab文件展開在臨時(shí)文件夾后運(yùn)行的名另。如果缺少此命令設(shè)定,將尋找 InfFile= and InfSection= keys 以運(yùn)行掛鉤節(jié)。

            InfFile=[name of win32 INF file inside the CAB] 可以是在cab文件中的其他inf文件

            InfSection=[section name in the InfFile mentioned in above key]

             

            無條件安裝Hook[Setup Hooks]節(jié)中指定,且在add.Code節(jié)之前執(zhí)行。

            [Setup Hooks]

            hookname1=section-name4

            hookname2=section-name5

             

            如果要使用Hook節(jié),需要指定version如下(否則下載組件服務(wù)會(huì)忽略):

            [Version]

            Signature="$CHICAGO$"

            AdvancedINF=2.0

             

            ;例子分析最后給出。

             

            Internet 組件下載服務(wù)

            Internet 組件下載服務(wù)通過單一函數(shù)導(dǎo)出:CoGetClassObjectFromURL。此函數(shù)下載應(yīng)用代碼,校驗(yàn)且安裝OLE組件,由IE實(shí)現(xiàn)

            CoGetClassObjectFromURL 函數(shù)返回一個(gè)給定rclsid的工廠對(duì)象。如果無CLSID CLSID_NULL),此函數(shù)根據(jù)contentTypeMIME類型進(jìn)行選擇。如果對(duì)象已經(jīng)安裝,就實(shí)例化,否則,從指定的url處或者internet搜索頁下載必要的代碼

            "下載和安裝" 進(jìn)程處理以下步驟:

            使用URL Moniker(s)下載必要的代碼。

            調(diào)用 WinVerifyTrust 以確信所有下載文件安裝是安全的

            所有自注冊組件完成注冊

            增加對(duì)下載的組件的跟蹤的注冊項(xiàng)

            利用rclsid調(diào)用 CoGetClassObject

            在通常瀏覽器設(shè)定下,直接通過HTML OBJECT 元素獲取必須的參數(shù)。舉例:對(duì)于一個(gè) <OBJECT>標(biāo)簽"CODEBASE=http://www.foo.com/bar.ocx#Version=a,b,c,d",szCodeURL "http://www.foo.com/bar.ocx", dwFileVersionMS MAKELONG(b, a), dwFileVersionLS MAKELONG(d, c).

             

            存儲(chǔ)/緩存下載的代碼

            下載的代碼存儲(chǔ)在windows\occache.。此位置可被注冊表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ActiveXCache值所覆蓋。 有些組件安裝在\windows \windows\system.。所有轄載的代碼登記在一個(gè)新的 "Module Usage" 注冊節(jié)以保持對(duì)此代碼的跟蹤。下載的代碼不可被自動(dòng)刪除但可被用戶通過控制面板的清除功能請(qǐng)除掉。

             

            Internet 搜索路徑

            當(dāng)Internet 組件下載調(diào)用下載代碼,它遍歷Internet搜索路徑尋找引用的組件。此處的路徑是對(duì)象對(duì)處服務(wù)器的列表,被GetClassObjectFromURL調(diào)用。 即使 <OBJECT> 標(biāo)記沒有指定CODEBASE 下載 OLE 控件,Internet 組件下載服務(wù)將依然使用Internet 搜索路徑尋找必要的代碼。

             

            Internet 搜索路徑語法

            搜索路徑存儲(chǔ)在注冊表HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\CodeBaseSearchPath. ,如下格式:

            CodeBaseSearchPath = <URL1>; <URL2>; ... <URLm>; CODEBASE; <URLm+1>;

                ... <URLn-1>; <URLn>

            每一個(gè)URL都是絕對(duì)路徑,依次搜索下載,按照CODEBASE指定的szCodeURL 。

             

             

             

            Win32 INF 語法中特定變量:

            EXTRACT_DIR

            CAB文件展開后的目錄

            run=%EXTRACT_DIR%/mysetup.exe

             

            OBJECT_DIR

            Windows下的Downloaded Program Files 目錄\windows directory. 

             一個(gè) internet inf的例子。

            我們通過Terminal Services 服務(wù)來控制遠(yuǎn)端計(jì)算機(jī)時(shí)除了可以通過遠(yuǎn)程連接管理器外,還可以通過一個(gè)web中的activex控件進(jìn)行發(fā)布,此控件信息在:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/termserv/termserv/embedding_the_remote_desktop_activex_control_in_a_web_page.asp

            此控件的internet發(fā)布inf文件如下,我們進(jìn)行逐節(jié)分析:

             

            ; INF file for Terminal Server Web client       注釋;開頭

            [VERSION]        ;確定版本,否則下載服務(wù)不認(rèn)可有關(guān)內(nèi)容

            signature="$CHICAGO$"

            AdancedINF=2.0

             

            [Add.Code]                      ;安裝節(jié) ,告訴我們此inf文件肯定還有一個(gè)稱作msrdp.ocx

            msrdp.ocx=msrdp.ocx           ;的節(jié),此inf文件僅安裝一個(gè)組件

             

            [msrdp.ocx]                        ;add.code節(jié)指定的節(jié)

            file-win32-x86=thiscab        ;文件在當(dāng)前cab文件中

            clsid={9059f30f-4eb1-4bd2-9fdc-36f43a218f4a}        ;組件的clsid

            FileVersion=5,1,2600,1094                                      ;文件版本

            RegisterServer=yes                                                        ;是否注冊組件,下在后注冊組件

             

            [Setup Hooks]                            ;無條件掛鉤      ,此節(jié)指定有多少無條件掛鉤,僅有一個(gè)

            AddToRegHook=AddToRegHook

             

            [AddToRegHook]                ;無條件掛鉤節(jié)

            InfFile=msrdp.inf                  ;從msrdp.inf中讀取信息

            InfSection=DefaultInstall       ;指定標(biāo)準(zhǔn)安裝文件

             

            [DefaultInstall]                     ;需要按照安裝文件解釋的節(jié)

            AddReg=AddIMERegEntries              ;尋找 AddIMERegEntries 節(jié)

             

            [AddIMERegEntries]            ;按照標(biāo)準(zhǔn)inf文件中的addreg類節(jié)來解釋此節(jié)內(nèi)容

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","msime95.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","msime97.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","imejp98.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","imejp.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","imjp8.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\JPN","imjp81.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","msime95.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","msime95k.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","msuni95k.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","imekr.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","imekr98u.ime",,"null"

            HKLM,"SOFTWARE\Microsoft\Terminal Server Client\IME Mapping Table\KOR","imekr61.ime",,"null"

            posted on 2008-06-19 10:46 大龍 閱讀(1470) 評(píng)論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            日本加勒比久久精品| 无码人妻久久久一区二区三区| 久久97精品久久久久久久不卡| 久久精品草草草| 欧美一级久久久久久久大| 无码超乳爆乳中文字幕久久| 日本一区精品久久久久影院| 2020国产成人久久精品| 久久精品国产亚洲综合色| 偷偷做久久久久网站| 国产999精品久久久久久| 久久精品国产色蜜蜜麻豆| 成人a毛片久久免费播放| 97精品依人久久久大香线蕉97| 久久精品国产99国产电影网| 久久综合鬼色88久久精品综合自在自线噜噜| 久久婷婷五月综合色高清| 久久久久亚洲精品无码网址 | 久久久久亚洲精品无码网址| 久久午夜伦鲁片免费无码| 日本五月天婷久久网站| 久久99精品久久久久久9蜜桃| 精品久久久久久久久午夜福利| 久久久久久免费视频| 久久久久综合国产欧美一区二区| jizzjizz国产精品久久| 熟妇人妻久久中文字幕| 久久久噜噜噜久久中文字幕色伊伊| 久久久国产精华液| 久久精品国产欧美日韩| 国产精品免费看久久久香蕉| 久久久精品午夜免费不卡| 99国产欧美久久久精品蜜芽 | 久久久噜噜噜久久中文福利| 7777精品伊人久久久大香线蕉| 青青热久久国产久精品| 伊人久久无码精品中文字幕| 中文字幕无码久久久| 欧美一区二区三区久久综合| 久久婷婷五月综合色高清| 久久久国产精品福利免费|