【討論】【教學】製作自己的 影音解碼codec包 --3--inf檔的撰寫



贊助商連結


purk
2005-06-24, 09:30 PM
ms的相關資料http://msdn.microsoft.com/library/default.asp?url=/library/en-us/install/hh/install/inf-format_70c9fc6c-3577-44fb-95e8-c44fa0429fd2.xml.asp


這是轉貼 然後稍微編輯過的

原始檔案在這邊ftp://ftp.nsysu.edu.tw/cpatch/faq/tech/tech_infnew.txt


* updated by Kii Ali, 12-11-2001

------------------------------------------------------------------------------------------
新式 INF 檔討論 by Jonson & Issac

ftp://ftp.nsysu.edu.tw/cpatch/faq/tech/tech_infnew.txt

--------------------------------------------------
新式 INF 檔討論 by Jonson & Issac


本文是 Issac Chang 與 Jonson 關於新式 INF 檔(AdvancedINF 2.5)寫法的私下往來
討論信件。
經由 Issac Chang 整理,Jonson 同意整理如下。希望能減少 INF 新手的入
門摸索時間。





討論內容大約包括:


1. 建立/刪除程式群組及捷徑

2. 於安裝前後執行的指令

3. 刪除安裝的檔案及目錄

4. 讓使用者指定安裝目錄


可參考下列檔案中的 .INF 檔:


Jonson 的:
Registry Search & Replace 中文版
ftp://ftp.nsysu.edu.tw/cpatch/system/regsrch/cregsrch211.exe

-或-

PowerZip 4.5 中文化升級版
ftp://ftp.nsysu.edu.tw/cpatch/arc/powerzip/cpowerzip45.exe



Issac Chang 的
GhostTyper98 v1.0e 中文版
ftp://ftp.nsysu.edu.tw/cpatch/other/ghosttyper98/cgt98.exe

-或-
Registry Crawler v1.2 中文版
ftp://ftp.nsysu.edu.tw/cpatch/system/regcrawler/cregc12.exe


如果您根本看不懂這些往來信件到底在談甚麼,您可以先看看:
http://mail2.scu.edu.tw/~u2504249/inf98.htm

********************************************************************************
I>
中文化 INF-TOOL 的時後,發現微軟的 .INF 檔蠻有趣的,翻了翻相關資料後,願與


大家分享一下小小的心得:http://mail2.scu.edu.tw/~u2504249/inf98.htm


以下是看了「.INF 檔大解密」之後的幾個疑問及補充:

一. .INF 檔執行方式
1. 使用 Winzip Self-Extractor 2.2 Beta 可以直接將 .INF 指定為自解檔解壓縮完畢時要執行的指令,之前的版本則不行。

2. rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 File.inf
這個指令是 NT 的指令!


3. Setup.exe 所使用的 .INF 檔大都是有自己的規格和微軟的不同,您可比較一下,若是和微軟的規格一樣又何必使用 Setup.exe,這實在是多此一舉。


二. 註一( Windows 9X 的 Setup API 並不能供終端使用者指定安裝目錄 )

其實在 WIN 9X 已可以做到,就是我所謂的 .INF 檔的新寫法,您可以看一下我的
中文化作品「PowerZip 4.51中文化」及「Registry Search + Replace 2.11 中文版」,其安裝方式都是使用 .INF 檔讓使用者自行選擇安裝路徑。

三. 其它( [Install] 節區 )Renfiles 指令不知您是否有測試過,我的經驗是沒有作用。
其實您公佈的資料實在不能稱作「.INF 檔大解密」,Issac Chang 您先別忙著生氣,先看看我的說法:公佈的資料其實都是來自微軟的資料,應該說是「.INF 檔格式基本教學」或「INF檔 - 微軟公佈的資料」。照慣例,微軟所公佈的資料都不會是最完整的,當然他必須留下一點秘密( 到 MSDN 再賺一筆? ),真正的秘密( 完整資枓 )往往只能從他們的檔案中窺得端倪,雖然您提及 Tweak UI 98 的 .INF 檔,但您未對其作解說,若您能對其作剖析或解說,那您的資料或許可稱得上「解密」吧!
倘若您尚不能同意我的說法,那就請您試著解答我以下的問題吧:


1. 您知道 .INF 檔在複製檔案時可以比較檔案版本或不比較版本強迫複製嗎?如何做?

2. 您知道在 AddReg 指令中如何加入「字串」形式的 registry,但您知道如何加入「二進位值」或「DWORD」形態的 registry 資料嗎?如何做?


3. Copyfiles 節區中指定的檔案名稱是否支援長檔名?

"MS-DOS 模式", Command.com, PIFMGR.DLL, 0,, C:\WIN97, Dosprmpt
********* 1,2,3,4,5,6,7 *********


1 Shortcut Name


2 Command Name

3 Icon File Name

4 Icon Index


5 應該是執行時要最大化或最小化等等,但參數怎下?


6 Path To Command
I> 7 ?????????????????????? 這名稱會出現在哪?


不知這些資料是您從何處而得,或是您親身測試所得結論?但我所知的建立捷徑方式和您所寫不同。

此處的建立捷徑是指建立在開始功能中的捷徑而言,不知您寫的是何種捷徑?


開始功能表之捷徑建立方法:

[DefaultInstall]

UpdateInis=AddLink

;利用更新 INI 檔的方式

[AddLink]

; 標準格式:INI FILE, 節區名, 鍵值 - (不可指定 - 否則失效), 資料, 旗標 - (此處無用)
; 資料內容格式:捷徑名稱及主檔名, 捷徑代表的檔案或指令, 圖示來源檔名, 圖示索引, 不詳;
註:圖示來源檔名不支援 %11% 或 %49000% 這種變數

[Uninstall]

CustomDestination=UninstallDestination
SmartReboot=I =====>>> 應該是 SmartReboot=1 吧?

是 "I" 沒錯
SmartReboot=I 是拒絕重新開機功能,
A 則是提示重新開機(等同 ReBoot=1)
此命令可用於 [DefaultInstall] 若不使用此命令,於更換了系統檔案之後一樣會提示重開機。
( [DefaultInstall])

I> Cleanup=1 =====>>> CleanUP 是要 Clean 甚麼東西?

指定於安裝或反安裝後刪除 INF 檔本身,本指令可用於 [DefaultInstall]

[DestinationDirs]
AddFiles=49000 =====>>> 49000 是使用者選擇的安裝目錄對吧,

那 49001、49002、
49003 等是???
全都是一樣的,指定方式: 49000,49001,49002,49003=PackageDestination49000


[MyCustomDestination]
;need to add new LFN stuff here.
49000,49001,49002,49003=PackageDestination49000,1 =====>>> 最想知道的是這一行到底是甚

麼意思...

此行指定 49000, 49001, 49002, 49003 同為使用者選擇的軟體安裝路徑路徑取得位置在 [PackageDestination49000] 中定義


參數:1 代表取得安裝路徑後,需要使用者再次確認
5 或 7 代表取得安裝路徑後,自動繼續執行安裝,不需要使用者確認

[UninstallDestination]

49000=UninstallDestination49000,5 =====>>> 5 means???
如上

[PackageDestination49000]


HKLM,SOFTWARE\%IncName%\%ShortName%,InstallDir,%InstallPrompt%,%DefaultDir%
I> =====>>> 最想知道的是這一行到底是甚麼意思...



HKLM,SOFTWARE\%IncName%\%ShortName%,InstallDir
取得系統登錄值,此取得值需是軟體的正確安裝路徑。



%InstallPrompt% 是取得程式安裝路徑後需要使用者確認時的提示字串。
%DefaultDir% 是程式在安裝時的預設路徑。看到您說明好像還需要
使用者執行一個批次檔,應可利用下列方式完成:

[DefaultInstall]
CopyFiles=MyCopyFiles ;複製檔案(節區方式)

AddReg=MyAddReg ;新增登錄項目


; Reboot=1 ;This works when called by AdvPack.dll (won't work if called by Setupx.dll).


; Restart=1 ;Why this line can't work...
I> RunPostSetupCommands=RunMeBa ; 經由 AdvPack.dll 才行,Setupx.dll 沒用。

[RunMeBa]


Command2RunAfterInstall.exe|.bat|.com etc.



因為這是新版 INF 才有的功能,故舊式的 INF 檔啟動方式無法使用此功能。


RunPostSetupCommands 無法支援 49000 這種變數,所以在此處執行的程式無法 知道使用者的軟體安裝路徑。故只能執行系統上的程式,對需

要在軟體安裝路徑中執行的程式則無法使用。也就是說在呼叫程式時即需指定完整路徑,但不可用 %11% 或 %49000% 這種變數。



********************************************************************************

1. 您知道 Section Name 的長度限制嗎?我的 [DefaultUninstallDestination49000]就太長,造成 INF 無法執行。如果您知道,我就不需要一次減一個字元測試了

不知道,因為我沒寫那麼長過。


2. 建立程式群組沒問題,可是刪除程式群組後非得要重新開機,建立的群組才會不見。(至少在我的 98 是這樣的情形)。有解嗎?


奇怪,我的不用重開機呀!建立程式群組的方法

[AddLink]

setup.ini, progman.groups,, "group0=%ShortAppName%"setup.ini, group0,, ""%ShortAppName%""setup.ini, group0,, """%Icon1Name%"",""%LinkName%"",""Explorer.icl"",4,"


[RemoveLink] setup.ini, progman.groups,, "group0=%ShortAppName%"
setup.ini, group0,, ""%ShortAppName%""setup.ini, group0,, ""%Icon1Name%""



3. 您的 .INF 檔是用記事本寫的還是用 MS 的 Inf Editor 寫的

我是自己用鍵盤一個一個字敲進去的。您知道微軟有寫 INF 的工具嗎?
有的話,別忘了通知我一下呀!


他們說萎軟的 Windows 98 DDK 裡面有 INF Editor(上次誤植為 INF Writer)。

曾經想下載來用看看,無奈卻發現原來 Windows 98 DDK 足足有 30 MB 大,只好作罷。現在也是和您一樣一字一字地刻的。

這個嘛!! 我試試看能不能抓回來看看!!



[PackageDestination49000]
HKCU,SOFTWARE\%IncName%\%ShortAppName%\%VerNum%,InstallDir,%InstallPrompt%,C:\Program Files\QuickNotes


上面這行的意思是不是表示如果找得到 InstallDir 的內容資料,就用它來當%InstallPrompt% 視窗欲取得的安裝目錄,否則就用 C:\Program Files\QuickNotes 來當成安裝目錄?

是的。
又 4900X 好像不一定要叫做 49000X 對吧?上次用了 77777 一樣照跑不誤。
4900X 這東西應該是用來取 Registry 中的 Value 的

內容資料(就像用 InstallDir
可取得軟體的安裝目錄)。不知道還有沒有其他用途?用 1000345 也可以吧!(哈)再請問您的

egistrySearch & Replace 是用那個軟體包裝的?為甚麼可以讓使用者選
擇解壓路徑?我用 WZSE 2.0 與 2.2 Beta 都沒有讓使用者選擇安裝路徑的功能。難不成您用的是 WZSE 2.1 版?



這跟用那個軟體包裝無關啦!
雖然我是用 WZSE 2.2 Beta 包裝的,但主要都是 INF 檔在搞鬼。


嗨:下面這一段是我從 REGISTRY 匯出來的,如果要用 .INF 加到 Registry 中,是否有辦法辦到呢?
用已知的方法做會得到 AdvPack.dll 丟回一個錯誤訊息:「記憶體配置失敗」。

REGEDIT4


[HKEY_LOCAL_MACHINE\Software\4Developers\RCrawler]

"InstallDir"="C:\\PROGRA~1\\RCRAWLER"
"破解"=hex:54,68,65,20,47,6f,64,46,61,64,65,72,20,5b,70,63,74,5d,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,38,32,36,37,2d,40,4c,32,54,54,32,53,59,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\

00,00,00,00,00,00,00,00,00,00,00,00,00,00


=================================================================================



用下面的方式就可以了。




[Version]


Signature="$CHICAGO$"


Provider=%Author%
AdvancedINF=2.5,"您需要新版本的 AdvPack.dll"



[MyInst]
RequiredEngine=Setupapi
AddReg=InstallAddReg



[InstallAddReg]


HKLM,Software\%IncName%\%ShortName%,InstallDir,,"C:\PROGRA~1\RCRAWLER"


;HKLM,Software\%IncName%\%ShortName%,"破解",1,54,68,65,20,47,6f,64,46,61,64,65,72,...(省略)


HKLM,Software\%IncName%\%ShortName%,"破解",0x00000001,54,68,65,20,47,6f,64,46,61,64,65,72,...(省略)


********************************************************************************
====================================================

Q2:關於 DelDirs
您有沒有遇過用 DelDirs 刪不掉 49000 該資料夾的問題?


試過您的 Registry Search & Replace,確實可用 DelDirs
將 49000 刪掉。


但弟自己寫的 .Inf 檔,不管怎樣,就是無法刪掉 49000,但 49000 裡面的檔案可用 DelFiles 刪掉。造成軟體移除之後,還留著一個空資料夾在那邊,怪彆扭的。

注意資料夾是否真的沒有任何檔案或「子資料夾」存在,
若有則絕對刪不掉。


像我作品之一:RegClean
因為資料夾中會存在著程式記錄修正的登錄檔 *.REG 所以一定會刪不掉該資料夾,故我建議:該資料夾就不用刪了。何況那些本不屬於程式本身的檔案資料,對使用者來說可能
是極重要的資料,最好是不要刪。刪了後可能反而造成使用者的不便。


確實是有空資料夾沒錯,不過那個空資料夾是原始程式的呀!

[DefaultInstall]
CopyFiles=MyCopyFiles.Main, MyCopyFiles.Dat

[DestinationDirs]

DefaultDestDir=49000

MyCopyFiles.Main=49000

MyCopyFiles.Dat=49000,Dat


日前丟出的 GhostTyper98,會建立下列目錄結構:
C:\Program Files\GhostTyper98\ C:\Program Files\GhostTyper98\Dat

移除後,兩個

目錄下當初以 .INF 安裝的檔案都會不見(廢話,
都被 DelFiles 刪掉了咩)。不過資料夾結構還是給我在那邊不動如山!我確定安裝完GT98

後立即移除(確保該資料夾下沒有新生的檔案),但 DelDirs 還是無效,豈不怪哉!


2. 若干 FTP 軟體會將使用者加入的站台資料另存他檔,如: *.INI、*.DAT 等,這些可不能刪,若刪了,使用者可能會@#&%#@
直至昏倒為止。




這我瞭解,我可不想招致民怨啊!上一個 CGT98.inf,您如果有空可以幫忙抓抓蟲嗎?弟懷疑可能是反安裝區段抓不到 InstallDir 的問題,

不過我自 己試過改過好多地方,無奈總是無法成功。

應該不是「反安裝區段抓不到 InstallDir」的問題,因為您說過該資料夾下的檔案可被刪除,可見「反安裝區段抓得到 InstallDir」若真無

法解決問題的話,您大可拿Search + Replace 的 .inf 去套,只不過不知此檔是否能符合您的需求。

弟在丟出第一個丟出內含完整 .INF 安裝檔的中化作品(好像就是 GT98)前就看過您的 Reg. Search & Replace 的 .INF 檔囉!當初本來想

照抄,不過怕您覺得有智產權被侵犯的感覺,又加上您那個 .INF 檔並無法抓出使
用者電腦上實際的 \Program Files\ 路徑(弟無意冒犯)

,所以作罷,才
會自己寫(其間也參考了 Registry Crawler v1.2 的 .INF 檔)。或許您不認為抓到正確的 \Program Files\ 目錄有多重要

—反正大多數人的也都確實在 C:\Program Files\。不過對像弟這樣多作業系統共存的使用者來說會方便許多(在我的電腦中,Win97 用的是

C:\Pf97、Win98 用的是 C:\Program Files、Win NT 用的是 K:\Program Files)。



極是。此謂:「由做中學」。註:這可不是一所中學的名字。(哈)

讓我想起「石油國中」的笑話...

A1:關於 RunPostSetupCommands
您試過將 %49000% 寫在第一個引數嗎?
如:
%49000%\Cgt98.txt
或 %49000%\readme.exe



哈,果然不行!沒試過還真的不知道!不過以後如果有需要,用:
Start %49000%\Readme.txt 就可以了 ;-)


**********************************************************

PS.附上atbscodec的位置


http://ftp.isu.edu.tw/pub/CPatch/msupdate/win98se-nsrc/atbscodecl.exe

贊助商連結


琥珀
2005-06-24, 10:19 PM
以前找過 inf 撰寫格式的文章,不過不容易全部理解。

例如此檔案 (http://www.metabuilders.com/CopyImageUrl.zip),為了知道 %10% 是什麼,試著搜尋 MSDN 網站,終於有相關資料 (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/install/hh/install/create-inf_2f47a10b-cb46-472f-a0e8-d1dad435d0f4.xml.asp)。