论坛风格切换切换到宽版
  • 4385阅读
  • 5回复

新式 INF 檔討論 by Jonson & Issac [复制链接]

上一主题 下一主题
离线kiiali
 
发帖
805
金钱
0
威望
0
只看楼主 倒序阅读 0 发表于: 2002-11-05
新式 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 檔蠻有趣的,翻了翻相關資料後,願與
I> 大家分享一下小小的心得:http://mail2.scu.edu.tw/~u2504249/inf98.htm
J> 以下是看了「.INF 檔大解密」之後的幾個疑問及補充:
J> 一. .INF 檔執行方式
J>   1. 使用 Winzip Self-Extractor 2.2 Beta 可以直接將 .INF 指定為自解檔解壓
J>     縮完畢時要執行的指令,之前的版本則不行。
J>   2. rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 File.inf
J>     這個指令是 NT 的指令!
J>   3. Setup.exe 所使用的 .INF 檔大都是有自己的規格和微軟的不同,您可比較一
J>     下,若是和微軟的規格一樣又何必使用 Setup.exe,這實在是多此一舉。
J> 二. 註一( Windows 9X 的 Setup API 並不能供終端使用者指定安裝目錄 )
J>   其實在 WIN 9X 已可以做到,就是我所謂的 .INF 檔的新寫法,您可以看一下我的
J>   中文化作品「PowerZip 4.51中文化」及「Registry Search + Replace 2.11 中文
J>   版」,其安裝方式都是使用 .INF 檔讓使用者自行選擇安裝路徑。
J> 三. 其它( [Install] 節區 )
J>   Renfiles 指令不知您是否有測試過,我的經驗是沒有作用。
J>
J> 其實您公佈的資料實在不能稱作「.INF 檔大解密」,Issac Chang 您先別忙著生氣,
J> 先看看我的說法:
J>
J> 您公佈的資料其實都是來自微軟的資料,應該說是「.INF 檔格式基本教學」或「INF
J> 檔 - 微軟公佈的資料」。
J>
J> 照慣例,微軟所公佈的資料都不會是最完整的,當然他必須留下一點秘密( 到 MSDN
J> 再賺一筆? ),真正的秘密( 完整資枓 )往往只能從他們的檔案中窺得端倪,雖然您
J> 提及 Tweak UI 98 的 .INF 檔,但您未對其作解說,若您能對其作剖析或解說,那您
J> 的資料或許可稱得上「解密」吧!
J>
J> 倘若您尚不能同意我的說法,那就請您試著解答我以下的問題吧:
J> 1. 您知道 .INF 檔在複製檔案時可以比較檔案版本或不比較版本強迫複製嗎?如何做?
J> 2. 您知道在 AddReg 指令中如何加入「字串」形式的 registry,但您知道如何加入「
J>   二進位值」或「DWORD」形態的 registry 資料嗎?如何做?
J> 3. Copyfiles 節區中指定的檔案名稱是否支援長檔名?
********************************************************************************
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。
离线kiiali
发帖
805
金钱
0
威望
0
只看该作者 1 发表于: 2002-11-05
I> "MS-DOS 模式", Command.com, PIFMGR.DLL, 0,, C:WIN97, Dosprmpt
I> ********* 1,2,3,4,5,6,7 *********
I> 1 Shortcut Name
I> 2 Command Name
I> 3 Icon File Name
I> 4 Icon Index
I> 5 ?????????????????????? 應該是執行時要最大化或最小化等等,但參數怎下?
I> 6 Path To Command
I> 7 ?????????????????????? 這名稱會出現在哪?
J> 不知這些資料是您從何處而得,或是您親身測試所得結論?但我所知的建立捷徑方式和
J> 您所寫不同。此處的建立捷徑是指建立在開始功能中的捷徑而言,不知您寫的是何種捷
J> 徑?
J> 開始功能表之捷徑建立方法:
J> [DefaultInstall]
J> UpdateInis=AddLink   ;利用更新 INI 檔的方式
J> [AddLink]
J> ; 標準格式:INI FILE, 節區名, 鍵值 - (不可指定 - 否則失效), 資料, 旗標 - (此處無用)
J> ; 資料內容格式:捷徑名稱及主檔名, 捷徑代表的檔案或指令, 圖示來源檔名, 圖示索引, 不詳
J> ; 註:圖示來源檔名不支援 %11% 或 %49000% 這種變數
J> [Uninstall]
J> CustomDestination=UninstallDestination
I> SmartReboot=I =====>>> 應該是 SmartReboot=1 吧?
J> 是 "I" 沒錯
J> SmartReboot=I 是拒絕重新開機功能,A 則是提示重新開機(等同 ReBoot=1)
J> 此命令可用於 [DefaultInstall]
J> 若不使用此命令,於更換了系統檔案之後一樣會提示重開機。( [DefaultInstall])
I> Cleanup=1 =====>>> CleanUP 是要 Clean 甚麼東西?
J> 指定於安裝或反安裝後刪除 INF 檔本身,本指令可用於 [DefaultInstall]
I> [DestinationDirs]
I> AddFiles=49000 =====>>> 49000 是使用者選擇的安裝目錄對吧,那 49001、49002、
I> 49003 等是???
J> 全都是一樣的,指定方式: 49000,49001,49002,49003=PackageDestination49000
I> [MyCustomDestination]
I> ;need to add new LFN stuff here.
I> 49000,49001,49002,49003=PackageDestination49000,1 =====>>> 最想知道的是這一
I> 行到底是甚麼意思...
J> 此行指定 49000, 49001, 49002, 49003 同為使用者選擇的軟體安裝路徑
J> 路逕取得位置在 [PackageDestination49000] 中定義
J> 參數:
J> 1 代表取得安裝路徑後,需要使用者再次確認
J> 5 或 7 代表取得安裝路徑後,自動繼續執行安裝,不需要使用者確認
I> [UninstallDestination]
I> 49000=UninstallDestination49000,5 =====>>> 5 means???
J> 如上
I> [PackageDestination49000]
I> HKLM,SOFTWARE%IncName%%ShortName%,InstallDir,%InstallPrompt%,%DefaultDir%
I> =====>>> 最想知道的是這一行到底是甚麼意思...
J> HKLM,SOFTWARE%IncName%%ShortName%,InstallDir
J> 取得系統登錄值,此取得值需是軟體的正確安裝路徑。
J> %InstallPrompt% 是取得程式安裝路徑後需要使用者確認時的提示字串。
J> %DefaultDir% 是程式在安裝時的預設路徑。
I> 看到您說明好像還需要使用者執行一個批次檔,應可利用下列方式完成:
I> [DefaultInstall]
I> CopyFiles=MyCopyFiles ;複製檔案(節區方式)
I> AddReg=MyAddReg ;新增登錄項目
I> ; Reboot=1 ;This works when called by AdvPack.dll (won't work if called by Setupx.dll).
I> ; Restart=1 ;Why this line can't work...
I> RunPostSetupCommands=RunMeBa ; 經由 AdvPack.dll 才行,Setupx.dll 沒用。
I> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
I> [RunMeBa]
I> Command2RunAfterInstall.exe|.bat|.com etc.
J> 因為這是新版 INF 才有的功能,故舊式的 INF 檔啟動方式無法使用此功能。
J> RunPostSetupCommands 無法支援 49000 這種變數,所以在此處執行的程式無法
J> 知道使用者的軟體安裝路徑。
J> 故只能執行系統上的程式,對需要在軟體安裝路徑中執行的程式則無法使用。
J> 也就是說在呼叫程式時即需指定完整路徑,但不可用 %11% 或 %49000% 這種
J> 變數。
********************************************************************************
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。
离线kiiali
发帖
805
金钱
0
威望
0
只看该作者 2 发表于: 2002-11-05
I> 1. 您知道 Section Name 的長度限制嗎?我的 [DefaultUninstallDestination49000]
I>   就太長,造成 INF 無法執行。如果您知道,我就不需要一次減一個字元測試了 ;-)
J> 不知道,因為我沒寫那麼長過。
I> 2. 建立程式群組沒問題,可是刪除程式群組後非得要重新開機,建立的群組才會不見。
>   (至少在我的 98 是這樣的情形)。有解嗎?
J> 奇怪,我的不用重開機呀!
J> 建立程式群組的方法
J> [AddLink]
J> setup.ini, progman.groups,, "group0=%ShortAppName%"
J> setup.ini, group0,, ""%ShortAppName%""
J> setup.ini, group0,, """%Icon1Name%"",""%LinkName%"",""Explorer.icl"",4,"
J> [RemoveLink]
J> setup.ini, progman.groups,, "group0=%ShortAppName%"
J> setup.ini, group0,, ""%ShortAppName%""
J> setup.ini, group0,, ""%Icon1Name%""
I> 3. 您的 .INF 檔是用記事本寫的還是用 MS 的 Inf Editor 寫的?
J> 我是自己用鍵盤一個一個字敲進去的。
J> 您知道微軟有寫 INF 的工具嗎?
J> 有的話,別忘了通知我一下呀!
********************************************************************************
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。
离线kiiali
发帖
805
金钱
0
威望
0
只看该作者 3 发表于: 2002-11-05
I> 他們說萎軟的 Windows 98 DDK 裡面有 INF Editor(上次誤植為 INF Writer)。曾經
I> 想下載來用看看,無奈卻發現原來 Windows 98 DDK 足足有 30 MB 大,只好作罷。現在
I> 也是和您一樣一字一字地刻的。
J> 這個嘛!! 我試試看能不能抓回來看看!!
I> [PackageDestination49000]
I> HKCU,SOFTWARE%IncName%%ShortAppName%%VerNum%,InstallDir,%InstallPrompt%,C:Program FilesQuickNotes
I> 上面這行的意思是不是表示如果找得到 InstallDir 的內容資料,就用它來當
I> %InstallPrompt% 視窗欲取得的安裝目錄,否則就用 C:Program FilesQuickNotes 來
I> 當成安裝目錄?
J> 是的。
I> 又 4900X 好像不一定要叫做 49000X 對吧?上次用了 77777 一樣照跑不誤。
I> 4900X 這東西應該是用來取 Registry 中的 Value 的內容資料(就像用 InstallDir
I> 可取得軟體的安裝目錄)。不知道還有沒有其他用途?
J> 用 1000345 也可以吧!(哈)
I> 再請問您的 Registry Search & Replace 是用那個軟體包裝的?為甚麼可以讓使用者選
I> 擇解壓路徑?我用 WZSE 2.0 與 2.2 Beta 都沒有讓使用者選擇安裝路徑的功能。難不
I> 成您用的是 WZSE 2.1 版?
J> 這跟用那個軟體包裝無關啦!
J> 雖然我是用 WZSE 2.2 Beta 包裝的,但主要都是 INF 檔在搞鬼。
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。
离线kiiali
发帖
805
金钱
0
威望
0
只看该作者 4 发表于: 2002-11-05
I > 嗨:
I> 下面這一段是我從 REGISTRY 匯出來的,如果要用 .INF 加到 Registry 中,是否有
I> 辦法辦到呢?用已知的方法做會得到 AdvPack.dll 丟回一個錯誤訊息:「記憶體配置
I> 失敗」。
I> =================================================================================
I> REGEDIT4
I> [HKEY_LOCAL_MACHINESoftware4DevelopersRCrawler]
I> "InstallDir"="C:PROGRA~1RCRAWLER"
I> "破解"=hex:54,68,65,20,47,6f,64,46,61,64,65,72,20,5b,70,63,74,5d,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   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,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,
I>   00,00,00,00,00,00,00,00,00,00,00,00,00,00
I> =================================================================================
用下面的方式就可以了。
[Version]
Signature="$CHICAGO$"
Provider=%Author%
AdvancedINF=2.5,"您需要新版本的 AdvPack.dll"
[MyInst]
RequiredEngine=Setupapi
AddReg=InstallAddReg
[InstallAddReg]
HKLM,Software%IncName%%ShortName%,InstallDir,,"C:PROGRA~1RCRAWLER"
;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,...(省略)
********************************************************************************
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。
离线kiiali
发帖
805
金钱
0
威望
0
只看该作者 5 发表于: 2002-11-05
I > ====================================================
I > Q2:關於 DelDirs
I > ====================================================
I > 您有沒有遇過用 DelDirs 刪不掉 49000 該資料夾的問題?
I > 試過您的 Registry Search & Replace,確實可用 DelDirs
I > 將 49000 刪掉。
I > 但弟自己寫的 .Inf 檔,不管怎樣,就是無法刪掉 49000,
I > 但 49000 裡面的檔案可用 DelFiles 刪掉。造成軟體移除之
I > 後,還留著一個空資料夾在那邊,怪彆扭的。

J> 注意資料夾是否真的沒有任何檔案或「子資料夾」存在,
J> 若有則絕對刪不掉。
J> 像我作品之一:RegClean
J> 因為資料夾中會存在著程式記錄修正的登錄檔 *.REG 所以
J> 一定會刪不掉該資料夾,故我建議:該資料夾就不用刪了。
J> 何況那些本不屬於程式本身的檔案資料,對使用者來說可能
J> 是極重要的資料,最好是不要刪。
J> 刪了後可能反而造成使用者的不便。
I> 確實是有空資料夾沒錯,不過那個空資料夾是原始程式的呀!
I> [DefaultInstall]
I> CopyFiles=MyCopyFiles.Main, MyCopyFiles.Dat
I> [DestinationDirs]
I> DefaultDestDir=49000
I> MyCopyFiles.Main=49000
I> MyCopyFiles.Dat=49000,Dat
I> 日前丟出的 GhostTyper98,會建立下列目錄結構:
I> C:Program FilesGhostTyper98
I> C:Program FilesGhostTyper98Dat
I> 移除後,兩個目錄下當初以 .INF 安裝的檔案都會不見(廢話,
I> 都被 DelFiles 刪掉了咩)。不過資料夾結構還是給我在那邊不
I> 動如山!我確定安裝完 GT98 後立即移除(確保該資料夾下沒有
I> 新生的檔案),但 DelDirs 還是無效,豈不怪哉!
J> 2. 若干 FTP 軟體會將使用者加入的站台資料另存他檔,如:
J> *.INI、*.DAT 等,這些可不能刪,若刪了,使用者可能會@#&%#@
J> 直至昏倒為止。
I> 這我瞭解,我可不想招致民怨啊!
I> 附上一個 CGT98.inf,您如果有空可以幫忙抓抓蟲嗎?弟懷
I> 疑可能是反安裝區段抓不到 InstallDir 的問題,不過我自
I> 己試過改過好多地方,無奈總是無法成功。

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

J> 若真無法解決問題的話,您大可拿Search + Replace 的 .inf 去套,
J> 只不過不知此檔是否能符合您的需求。
I> 弟在丟出第一個丟出內含完整 .INF 安裝檔的中化作品(好像就是 GT98)
I> 前就看過您的 Reg. Search & Replace 的 .INF 檔囉!當初本來想照抄,
I> 不過怕您覺得有智產權被侵犯的感覺,又加上您那個 .INF 檔並無法抓出使
I> 用者電腦上實際的 Program Files 路徑(弟無意冒犯),所以作罷,才
I> 會自己寫(其間也參考了 Registry Crawler v1.2 的 .INF 檔)。
I> 或許您不認為抓到正確的 Program Files 目錄有多重要—反正大多數人的
I> 也都確實在 C:Program Files。不過對像弟這樣多作業系統共存的使用者來
I> 說會方便許多(在我的電腦中,Win97 用的是 C:Pf97、Win98 用的是
I> C:Program Files、Win NT 用的是 K:Program Files)。
J> 極是。此謂:「由做中學」。註:這可不是一所中學的名字。(哈)
I> 讓我想起「石油國中」的笑話...
I> ====================================================
I> A1:關於 RunPostSetupCommands
I> ====================================================

J> 您試過將 %49000% 寫在第一個引數嗎?
J> 如:
J> %49000%Cgt98.txt
J> 或
J> %49000%readme.exe
I> 哈,果然不行!沒試過還真的不知道!不過以後如果有需要,用:
I> Start %49000%Readme.txt 就可以了 ;-)
自 2003 年起,Kii Ali 所有繁體版作品 "Help" 將譯為「幫助」,回歸軟體原始本意,不再遵照微軟的過度翻譯,而造成使用上的誤解。