• <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>

            C++樂園

            C/C++ 交流

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              12 隨筆 :: 18 文章 :: 14 評(píng)論 :: 0 Trackbacks

            丁健 張萬 江南

            安裝信息 (Setup Information) 文件是 Windows 系統(tǒng)支持的一種安裝信息存放文件,一般以 INF 作為擴(kuò)展名,因此也叫 INF 文件。安裝信息 INF 文件與 Windows 內(nèi)建的安裝服務(wù)引擎 (API 函數(shù)庫 ) 緊密協(xié)同工作,基于其嚴(yán)格的編寫語法制作而成的 INF 文件在拷貝、刪除文件,增、刪注冊(cè)表鍵,更改系統(tǒng)設(shè)置等方面都有優(yōu)秀的表現(xiàn),完全可以用來實(shí)現(xiàn)應(yīng)用程序文件安裝的目標(biāo),而且價(jià)格免費(fèi),透明度高,安裝程序小,可完全定制。 INF 文件是文本文件,可在任何文本編輯器內(nèi)查看、創(chuàng)建、修改,普通用戶使用 Windows 系統(tǒng)本身提供的記事本、寫字板即可進(jìn)行文件安裝腳本的編寫。

            INF 文件安裝動(dòng)作的觸發(fā)機(jī)制

            在文件目錄中用鼠標(biāo)右擊 INF 文件,會(huì)顯示不同于其他擴(kuò)展名文件的 安裝 菜單。 Windows 平臺(tái)在計(jì)算機(jī)中完成初始安裝后,就注冊(cè)了 INF 文件的 安裝 動(dòng)作,此 安裝 動(dòng)作關(guān)聯(lián)命令行程序基本形式為 :
            RunDll setupx.dll,InstallHinfSection section reboot-mode inf-name
            如筆者目前正在使用的 Windows 98 系統(tǒng)注冊(cè)表中, HKEY_CLASSES_ROOT\inffile\install\
            command
            鍵的默認(rèn)值為( install 即為安裝):
            C:\WINDOWS\rundll.exe setupx.dll,InstallHinfSection DefaultInstall 132 %1
            其中, rundll 程序以命令行的形式調(diào)用 Windows 的動(dòng)態(tài)鏈接庫,其命令格式為:
            rundll.exe <DLL
            文件名 >,< 入口點(diǎn) >,< 調(diào)用參數(shù) >
            setupx.dll
            是安裝 API(Setup API) 函數(shù)庫,包含了 InstallHinfSection SetupGetInfSections SetupInstallFromInfSection SetupPromptForDisk SetupDiCreateDevRegKey INF 文件內(nèi)部語法檢查、節(jié)名搜索、注冊(cè)鍵創(chuàng)建等功能函數(shù)。 setupx.dll 與其后的入口點(diǎn)用逗號(hào) (,) 分開,入口點(diǎn)是大小寫敏感的。
            Section
            INF 文件內(nèi)初始執(zhí)行節(jié)名,首先執(zhí)行該節(jié)內(nèi)容,默認(rèn)情況下名稱為 “DefaultInstall” ,系統(tǒng)用戶一般不宜對(duì)此做任何改動(dòng),如被改動(dòng),則在后續(xù) INF 文件的 Install 節(jié)使用相應(yīng)修改后的名稱。
            reboot-mode
            是重啟動(dòng)參數(shù),指示在 INF 文件執(zhí)行后對(duì)系統(tǒng)的設(shè)置進(jìn)行了改變,操作系統(tǒng)是否重新啟動(dòng)。該參數(shù)一般設(shè)為 132 4 ,即由安裝程序決定是否必須重啟動(dòng),因?yàn)槟承┰O(shè)置的改變必須在重啟動(dòng)后才能生效。
            inf-name
            INF 文件的名稱, “%1” 即為所選中文件本身。

            INF 文件內(nèi)部節(jié) (Section) 的定義

            INF 文件用特殊的文本文件格式編輯、保存, Windows 內(nèi)建的安裝函數(shù)遵循既定的語法從 INF 文件內(nèi)獲取安裝信息。 INF 文件和初始化 ( 或稱私有化, Private File) 文件相似,采用節(jié) (Section) 和入口 (Entries) 的索引機(jī)制,節(jié)和入口定義了所有操作類型及操作對(duì)象。一個(gè) INF 文件由不同類型的節(jié)組成,每類節(jié)都有其特殊的目的和不同的實(shí)現(xiàn)語法,每節(jié)的內(nèi)容均服務(wù)于該節(jié)的目的。除了基本的識(shí)別 INF 格式的 “Version” 節(jié)外, INF 文件中節(jié)的數(shù)目和類型沒有限制,主要取決于具體安裝任務(wù)。一個(gè)基本的 INF 文件,一般包含如下幾節(jié):
            ?

            節(jié)的名稱

            節(jié)的作用

            [Version]

            INF 文件頭,提供有效 INF 文件的版本信息

            [DefaultInstall]

            安裝包含所關(guān)聯(lián)動(dòng)作(文件拷貝或刪除,注冊(cè)表鍵值更新、子鍵增刪等)在 INF 文件內(nèi)的節(jié)名指針,默認(rèn)情況下首先執(zhí)行該節(jié)內(nèi)容

            [OtherInstall]

            [DefaultInstall] 節(jié)遵循相同的語法,但必須顯式的調(diào)用,常被用來定義反安裝動(dòng)作

            [DestinationDirs]

            指定羅列于一個(gè)節(jié)內(nèi)將被拷貝、刪除或重命名的文件在硬盤上的位置

            [FileCopy/Delete/RenameSection(s)]

            羅列將被拷貝、刪除或重命名的文件

            [RegistryUpdateSection(s)]

            指定對(duì)注冊(cè)表鍵值更新、子鍵增刪等動(dòng)作

            [IniFileUpdateSection(s)]

            指定對(duì) ini 文件的更新、快捷方式可通過該節(jié)進(jìn)行創(chuàng)建

            [SourceDisksNames]

            羅列文件所在盤盤名、盤卷標(biāo)、盤序列號(hào)

            [SourceDisksFiles]

            羅列安裝時(shí)使用的源文件及其所在盤

            [Strings]

            羅列本地化字符串(或稱宏字符串)


            表中黑體節(jié)名是保留關(guān)鍵字,名稱固定,大小寫不敏感,斜體節(jié)名名稱任意,由 INF 文件編寫者確定。每節(jié)的標(biāo)題字符均用括號(hào) ([]) 括起。 限于篇幅本文只對(duì)黑體節(jié)名做進(jìn)一步的解釋。

            [Version] 節(jié)

            任何 INF 文件的第一個(gè)小節(jié)均是 [Version] ,又稱為 INF 文件頭。一般有如下語句:

            [Version]
            Signature=“$Chicago$”
            LayoutFile=filename.inf

            其中, Signature 的值應(yīng)為 “$Chicago$” “$Windows 95$” “$Windows NT$” 中的一個(gè) ( 不區(qū)分大小寫 ) ,否則 Windows 不接受該文件為 INF 文件,內(nèi)建的動(dòng)作也就不會(huì)起作用。

            filename.inf 文件包含安裝組件必需的安裝布局信息 ( 源盤和源文件 ) ,該行是可選的,如果沒有提供布局信息文件,則在 INF 文件內(nèi)必須包含 [SourceDisksNames] [SourceDisksFiles] 節(jié)。

            [Install] 節(jié)

            [Install] 節(jié)提供了一個(gè) INF 文件安裝過程的總覽,它識(shí)別文件內(nèi)其他包含安裝信息節(jié)的詳細(xì)動(dòng)作,是 Windows 內(nèi)建安裝函數(shù)識(shí)別安裝過程和內(nèi)容的真正入口,用戶所有的安裝目的在這里表現(xiàn)。那些與 [Install] 節(jié)內(nèi)容不存在關(guān)聯(lián)的節(jié)的動(dòng)作將被忽略。

            [Install] 節(jié)分 [DefaultInstall] [OtherInstall] 兩類,它們使用相同的格式。 [DefaultInstall] 節(jié)節(jié)名 “DefaultInstall” 如前面表格內(nèi)容所述被顯式地在注冊(cè)表中指定,大小寫不敏感。該節(jié)也是系統(tǒng)獲取 INF 文件中安裝信息的首要入口,當(dāng)用戶右擊 INF 文件選 安裝 時(shí)該節(jié)內(nèi)容被執(zhí)行。 [OtherInstall] [DefaultInstall] 節(jié)遵循相同的語法 , 但必須被顯式地調(diào)用,常被用來定義反安裝動(dòng)作。它們均可包括以下種類的可選入口 :

            CopyFiles=[CopyFiles-section-name]file-list-section[,file-list-section]
            RenFiles=file-list-section[,file-list-section]
            DelFiles=file-list-section[,file-list-section]
            UpdateInis=update-ini-section[,update-ini-section]
            UpdateIniFields=update-inifields-section[,update-inifields-section]
            AddReg=add-registry-section[,add-registry-section]
            DelReg=del-registry-section[,del-registry-section]
            Ini2Reg=ini-to-registry-section[,ini-to-registry-section]
            UpdateCfgSys=update-config-section
            UpdateAutoBat=update-autoexec-section

            上面的入口并非都必需,如果需要一個(gè)入口,則應(yīng)該在等號(hào)右側(cè)指出存在于該 INF 文件內(nèi)的索引節(jié)名 ( 不用指出節(jié)名的一個(gè)特例是 CopyFiles 入口 , 可使用 “@” 字符后跟文件名的形式,效果是直接將文件拷貝到 DestinationDirs 節(jié)所羅列的硬盤目錄 ) 。節(jié)名需由可打印字符組成,在中文系統(tǒng)平臺(tái)中,可使用中文字符作為節(jié)名,這也是體現(xiàn) INF 格式安裝本地化的地方,非常直觀。每類入口在一個(gè) [Install] 節(jié)內(nèi)只能出現(xiàn)一次,第二次及以后出現(xiàn)的同名重復(fù)入口將被忽略。每類入口的等號(hào)右側(cè)可羅列多個(gè)節(jié)名,節(jié)名之間以逗號(hào)分開,以便列舉同一類動(dòng)作的不同作用對(duì)象,如刪除多個(gè)注冊(cè)表鍵、拷貝文件到多個(gè)目錄路徑等。

            下表是各類入口的動(dòng)作含義,具體語法本文不做細(xì)述 :
            ?

            CopyFiles

            等號(hào)右側(cè)是拷貝文件羅列節(jié)節(jié)名,將文件拷貝到 DestinationDirs 節(jié)指定的目的地,所有的源文件必須在 SourceDisksFiles 節(jié)列出

            RenFiles

            重命名文件

            DelFiles

            刪除文件

            UpdateInis

            安裝過程中更新 INI 初始化文件內(nèi)容

            UpdateIniField

            安裝過程中更新 INI 初始化文件值內(nèi)容

            AddReg

            增加注冊(cè)表鍵或鍵值

            DelReg

            刪除注冊(cè)表鍵或鍵值

            Ini2Reg

            INI 文件內(nèi)容更新注冊(cè)表

            UpdateCfgSys

            更新 Config.sys 文件內(nèi)的設(shè)置

            UpdateAutoBat

            更新 Autoexec.bat 文件內(nèi)的設(shè)置


            在實(shí)際編寫 INF 文件時(shí),注冊(cè)表根鍵通常采用縮寫方式,如下表:

            HKCR

            HKEY_CLASSES_ROOT 的簡寫

            HKCU

            HKEY_CURRENT_USER 的簡寫

            HKLM

            HKEY_LOCAL_MACHINE 的簡寫

            HKU

            HKEY_USERS 的簡寫

            HKR

            相對(duì)鍵,對(duì)于硬件設(shè)備驅(qū)動(dòng)程序類安裝的

            ?

            [DestinationDirs] 節(jié)

            [DestinationDirs] 節(jié)指定拷貝、重命名或刪除文件三類動(dòng)作的目的目錄路徑,拷貝、重命名或刪除操作對(duì)象即文件的列表在專門的節(jié)中列出,這些節(jié)名最初在 “Install” CopyFiles RenFiles DelFiles 入口中明確。
            [DestinationDirs]
            節(jié)內(nèi)語句的語法為:
            file-list-section=LDID
            [Subdir]
            [DefaultDestDir=LDID
            [Subdir]]
            其中 file-list-section 為必選項(xiàng),是 CopyFiles RenFiles DelFiles 入口內(nèi)列出的節(jié)名。
            LDID(Logical disk identifier)
            為必選項(xiàng),是邏輯盤標(biāo)識(shí)碼,代表各種系統(tǒng)或?qū)崟r(shí)安裝路徑,邏輯盤標(biāo)識(shí)碼可看做一種宏字符串,隨系統(tǒng)或?qū)崟r(shí)安裝路徑的不同而相應(yīng)改變。邏輯盤標(biāo)識(shí)碼機(jī)制確保了安裝的靈活性和正確性,該標(biāo)識(shí)碼可為下表所述值之一:
            Subdir
            為可選項(xiàng),指定 LDID 目錄下的子目錄名。
            DefaultDestDir
            為可選項(xiàng),指定 CopyFiles RenFiles DelFiles 入口的缺省操作目錄。

            [SourceDisksNames] 節(jié)

            [SourceDisksNames] 節(jié)羅列源文件所在盤符序列碼、盤描述符、盤卷標(biāo)號(hào)和盤序列號(hào)。
            [SourceDisksNames]
            節(jié)內(nèi)語句的語法為:
            disk-ordinal=“disk-description”,disk-label,disk-serial-number
            其中 disk-ordinal 為必選項(xiàng),是盤符序列碼,標(biāo)識(shí)一個(gè)源盤,具有惟一性,一般可設(shè)置為從 1 開始遞增的整數(shù), 0 不是一個(gè)有效的盤符序列碼。當(dāng)存在多個(gè)源盤時(shí),盤符序列碼之間不能重復(fù)。
            disk-description
            為必選項(xiàng),是盤描述符,用雙引號(hào)括起的字符串或字符串宏描述盤的內(nèi)容或目的。安裝引擎將該字符串顯示在對(duì)話框內(nèi)以提示用戶。
            disk-label
            為源盤的卷標(biāo)識(shí)。
            disk-serial-number
            未使用,但必須被設(shè)置為 0

            [SourceDisksFiles] 節(jié)

            [SourceDisksFiles] 節(jié)指定安裝時(shí)使用的源文件和盤符序列碼、盤描述符。 [SourceDisksFiles] 節(jié)內(nèi)語句的語法為:
            file-name=disk-number[,subdir] [,file-size]
            其中 file-name 為必選項(xiàng),是源盤上文件的名稱。
            disk-number
            是包含 file-name 指定文件所在源盤的盤符序列碼,該盤符序列碼需在 [SourceDisksNames] 節(jié)中列出 , 并大于或等于 1
            Subdir
            為可選項(xiàng),指定文件所在源盤的子目錄,如省略則源盤為缺省安裝路徑。
            file-size
            為可選項(xiàng),表明文件的大小,以字節(jié)為單位。

            [Strings] 節(jié)

            [Strings] 節(jié)定義一個(gè)或多個(gè)本地化字符串,或稱字符串宏。盡管 [Strings] 節(jié)一般被放置在 INF 文件的末尾,字符串宏可在 INF 文件任何地方使用,安裝引擎解釋、展開字符串宏為給定的長字符串并做進(jìn)一步處理。字符串宏在使用時(shí)需用百分號(hào) (%) 括起。 [Strings] 節(jié)內(nèi)語句的語法為:
            strings-key=value
            其中 strings-key 為由字母或數(shù)字等可打印字符組成的宏名。
            Value
            為被雙引號(hào)括起的長字符串,字符串可由字母、數(shù)字或其他可打印字符組成。

            一個(gè)具體的安裝實(shí)例

            本文接下來列舉一個(gè)名為 “Mysetup.inf” 的安裝信息文件實(shí)例,以便讀者熟悉 INF 文件語法,領(lǐng)略 INF 文件的安裝效果。該 “Mysetup.inf” 文件可完成如下的安裝任務(wù):假設(shè)應(yīng)用程序有 “MyApp.exe” “MyApp.hlp” “MyApp.dll” 等幾個(gè)需安裝到應(yīng)用程序主目錄的文件,有 “Ass_1.dll” “Ass_2.dll” 等幾個(gè)需安裝到 Windows\System 子目錄的文件,要求將各文件按預(yù)定目錄位置拷貝到位,其中應(yīng)用程序主目錄可在安裝過程中選定,同時(shí),在 開始 > 程序 下面建立名為 我的程序組 的程序組,在該程序組下建立名為 我的應(yīng)用程序 我的應(yīng)用程序幫助 的兩個(gè)程序項(xiàng),分別與 “MyApp.exe” “MyApp.hlp” 文件關(guān)聯(lián)。
            完成上述安裝任務(wù)的 “Mysetup.inf” 文件內(nèi)容如下:

            [Version]
            signature=“$chicago$”
            [AdvSetup]
            HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Runonce\Setup
            “INF 制作安裝程序 ”,,“RunDll32.exe“%01%”\advpack.dll,LaunchINFSection Mysetup.inf,DefaultInstall2”
            [DefaultInstallX]
            [DefaultInstall]
            AddReg=AdvSetup
            [DefaultInstall2]
            CopyFiles =
            拷貝到用戶指定目錄,拷貝到 Windows\System 子目錄 ……
            CustomDestination=My-path
            UpdateInis =
            exe 文件快捷方式 , hlp 文件快捷方式, ……
            [SourceDisksNames]
            1=“
            文件所在目錄 ”,,0
            [SourceDisksFiles]
            MyApp.exe.exe=1,,1021
            MyApp.dll=1,,1021
            MyApp.hlp=1,,1021
            Ass_1.dll=1,,1021
            Ass_2.dll=1,,1021
            [DestinationDirs]
            拷貝到用戶指定目錄 = 49000
            拷貝到 Windows\System 子目錄 = 11
            [My-path]
            49000,49001,49002,49003=index-again,1
            [index-again]
            “”
            “” “”, ““ 默認(rèn)安裝到 “C:\MyApp” 目錄,可選擇 ”” “%30%\MyApp”
            [
            拷貝到用戶指定目錄 ]
            MyApp.exe
            MyApp.dll
            MyApp.hlp
            [
            拷貝到 Windows\System 子目錄 ]
            Ass_1.dll
            Ass_2.dll
            [
            exe 文件快捷方式 ]
            setup.ini, progman.groups,, “group1=““
            我的程序組 ”””
            setup.ini, group1,,“““
            我的應(yīng)用程序 ””,““““““%49000%\MyApp.exe””””””,,,,,““MyApp.exe”””
            [
            hlp 文件快捷方式 ]
            setup.ini, progman.groups,, “group1=““
            我的程序組 ”””
            setup.ini, group1,,“““
            我的應(yīng)用程序幫助 ””,““““““%49000%\MyApp.hlp””””””,,,,,““MyApp.hlp”””
            讀者會(huì)注意到上面的文件內(nèi)許多鍵名使用了中文,這是因?yàn)?/span> INF 格式文件支持中文提示及中文鍵名。這些中文鍵名不僅充當(dāng)功能鍵起索引的作用,還形象化地標(biāo)識(shí)了鍵的前后對(duì)應(yīng)關(guān)系,增強(qiáng)了文件內(nèi)容的可讀性,有利于后續(xù)更改、維護(hù)。

            安裝時(shí),首先確保應(yīng)用程序的所有待安裝文件和 “Mysetup.inf” 文件處在同一個(gè)目錄下,右擊 “Mysetup.inf” 文件選 安裝 或按 Shift 鍵的同時(shí)按功能鍵 F10 。待目錄選擇對(duì)話框出現(xiàn),點(diǎn)擊 瀏覽 按鈕或直接在文本編輯框內(nèi)鍵入目錄名稱后,屏幕顯示文件安裝拷貝和更新快捷方式進(jìn)度,最終結(jié)束。

            打開資源管理器,就可查看到所有文件均已拷貝到指定目錄位置。點(diǎn)擊 開始 > 程序 ,可以找到 我的程序組 程序組及下屬的 我的應(yīng)用程序 我的應(yīng)用程序幫助 程序項(xiàng),選中程序項(xiàng)均能激活對(duì)應(yīng)文件,說明文件安裝及快捷方式關(guān)聯(lián)均告成功。

            結(jié)

            本文介紹的文件安裝方法適合于大眾,讀者可熟悉語法、參考例子、效仿編寫,制作出自己的安裝信息文件。

            posted on 2007-01-25 09:08 小不懂^_^ 閱讀(1553) 評(píng)論(0)  編輯 收藏 引用

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


            久久精品国产精品亚洲下载| 国产AV影片久久久久久| 色偷偷88888欧美精品久久久| 亚洲日韩欧美一区久久久久我| 国产呻吟久久久久久久92| 欧美亚洲另类久久综合婷婷| 中文字幕无码av激情不卡久久| 97精品依人久久久大香线蕉97| 97久久国产综合精品女不卡| 久久www免费人成看国产片| 亚洲精品乱码久久久久久蜜桃 | 伊人久久综合无码成人网| 国产69精品久久久久777| 模特私拍国产精品久久| 亚洲一本综合久久| 久久91精品国产91久久麻豆| 久久天天躁夜夜躁狠狠躁2022| 国产日韩久久免费影院| 精品久久久久久中文字幕| 欧美久久精品一级c片片| 久久Av无码精品人妻系列| 99久久无色码中文字幕人妻| 久久久久久午夜精品| 久久亚洲精品无码VA大香大香| 精品久久久久久无码不卡| 亚洲午夜久久久影院| 精品久久人妻av中文字幕| 精品久久久久久久| 久久久午夜精品| 精品无码久久久久久尤物| a级毛片无码兔费真人久久| 久久久黄片| 久久99精品国产99久久6男男| 99久久99久久| 久久久久亚洲av无码专区| 国产精品免费久久久久影院 | 久久九九久精品国产免费直播| 熟妇人妻久久中文字幕| 国产亚州精品女人久久久久久 | 久久棈精品久久久久久噜噜| 91精品日韩人妻无码久久不卡|