2012年2月3日 星期五

Copy and Rename Files in INF

我們的驅動程式安裝包內有 32-bit 及 64-bit 的版本::
package\bt32.dll
package\bt64.dll
而在 32-bit / 64-bit 作業系統上安裝完後, 檔名需要變更為 bt.dll.

在 MSDN 上查了 INF directives, 很直覺地看到了 RenFiles 這個 directive, 於是馬上下去試:
[bt]
RenFiles            = bt32.RenFiles
[bt.NTamd64]
RenFiles            = bt64.RenFiles

[bt32.RenFiles]
bt.dll, bt32.dll
[bt64.RenFiles]
bt.dll, bt64.dll
安裝完後也如預期地變更了檔名, 結果之後的 DTM 測試卻報告 "Reinstall With IO" 測試項目失敗, 在分析原因後, 判斷是沒辦法在目地檔案(bt.dll)存在時做更名的動作, 然而 RenFiles directive 並沒有特別的參數來處理此問題, 因此放棄使用 RenFiles directive, 轉而回去研究原本早在使用的 CopyFiles directive.

原來 CopyFiles directive 有支援 copy and rename 的功能, 並且有參數來處理目地檔案存在的問題:
[file-list-section]
destination-file-name[,[source-file-name][,[unused][,flag]]]
於是趕緊試了一下:
[bt]
CopyFiles           = bt32.CopyFiles
[bt.NTamd64]
CopyFiles           = bt64.CopyFiles

[bt32.CopyFiles]
bt.dll, bt32.dll, , 0x00000008   ; COPYFLG_FORCE_FILE_IN_USE
[bt64.CopyFiles]
bt.dll, bt64.dll, , 0x00000008   ; COPYFLG_FORCE_FILE_IN_USE
結果安裝完後也變更了檔名, DTM 測試也通過!


更多資訊:
- INF Directives

沒有留言:

張貼留言