資源公用程式
本主題描述用來建置 MUI 應用程式的兩個公用程式。 雖然 MUIRCT 是 MUI 特定的工具,但 MUI 也會使用標準 Windows RC 編譯程式公用程式。 本地化資源及建置應用程式中會提供使用這些公用程式的說明。
MUIRCT 公用程式
MUIRCT (Muirct.exe) 是命令行公用程式,可用來將標準可執行檔分割成 LN 檔案和特定語言(也就是可本地化的)資源檔。 每個產生的檔案都包含檔案關聯的資源組態數據。 MUIRCT 包含在適用於 Windows Vista 的 Microsoft Windows SDK 中。
注意
從 Windows Vista 開始,Win32 資源載入器會更新為從語言特定檔案以及 LN 檔案載入資源。
MUIRCT 使用方式
根據rc_config檔案,將二進位檔分割成主要二進位檔和 mui 檔案。
Muirct -q rc_config [-c checksum_file [-b LangID]] [-x LangID] [-g LangId] [-f] [-m] [-v level] source_file [output_LN_file] [output_MUI_file]
從checksum_file擷取總和檢查碼,並將其插入output_file中。
Muirct -c checksum_file [-b LangID] -e output_file
根據checksum_file計算總和檢查碼,並將其插入output_file中。
Muirct -c checksum_file [-b LangID] -q rc_config -z output_file
從input_file傾印資源組態數據內容。
Muirct -d input_file
MUIRCT 語法
MUIRCT 可以從命令行參數和/或從使用 -q 參數指定的資源組態檔取得方向。
muirct [-h|-?] [ -c checksum_file] [-b langid] ]
[-g langid] [-q resource configuration file<RCF>] [-v level] [-x langid]
[-e output_file] [-z output_file] [-f] [-d MUI'ized file] [-m file_version]
source_filename [language_neutral_filename] [mui_filename]
參數和自變數
選擇 | 目的 |
---|---|
-h 或 -? | 顯示說明畫面。 |
-c | 指定要從中擷取或計算資源總和檢查碼的輸入checksum_file。 Checksum_file必須是包含可當地語系化資源的 Win32 二進位檔。 如果checksum_file包含多個語言的資源,則必須使用 -b 參數來指定應該使用哪一個,否則 MUIRCT 會失敗。 |
-b | 指定當以 -c 指定checksum_file包含多種語言的資源時,要使用的語言。 這個參數只能與 -c 參數搭配使用。 語言標識碼可以是十進位或十六進位格式。 如果checksum_file包含多種語言的資源,且未指定 -b,或 -b 參數所指定的語言在checksum_file中找不到,則 MUIRCT 會失敗。 |
-g | 指定要包含在 LN 檔案之資源組態數據區段中最終後援語言的語言標識碼。 如果資源載入器無法從線程慣用的UI語言載入要求的 .mui 檔案,它會使用最終後援語言作為上次嘗試。 LangID 值可以用十進位或十六進位格式指定。 例如,英文(美國)可以指定 -g 0x409 或 -g 1033。 |
-q | 指定根據rc_config檔案配置,將source_file分割成output_LN_file和output_MUI_file。 rc_config檔案是 XML 格式的檔案,會指定哪些資源會解壓縮至 .mui 檔案,而該檔案會留在 LN 檔案中。 rc_config可以指定資源類型和個別具名專案在output_LN_file與output_MUI_file之間的分佈。 source_file必須是 Win32 二進位檔,其中包含單一語言的資源,否則 MUIRCT 會失敗。 如果檔案中性語言中性,MUIRCT 不會分割檔案,因為檔案中只有語言標識碼值 0 來表示。 output_LN_file和output_mui_file是分割source_file之語言中性檔案和 .mui 檔案的名稱。 這些檔名是選擇性的。 如果未指定它們,MUIRCT 會將擴展名 .ln 和 .mui 附加至source_file。 一般而言,您應該先移除 「.ln」 擴展名,再部署檔案。 MUIRCT 會根據source_file名稱和檔案版本計算總和檢查碼,並將結果插入每個輸出檔的資源組態區段,以建立output_LN_file和output_MUI_file關聯。 與 -c 參數搭配使用時,-q 參數會優先使用。 如果 -q 參數所提供的rc_config檔案包含總和檢查碼 MUIRCT 會忽略 -c 參數,並將總和檢查碼值從值插入,rc_config檔案插入 LN 和.mui 檔案中。 如果在rc_config中找不到總和檢查碼值,MUIRCT 會根據 -c 參數的行為來計算資源總和檢查碼。 |
-v | 指定記錄的詳細資訊層級。 指定 1 列印所有基本錯誤訊息和作業結果。 指定 2 也包含 .mui 檔案和 LN 檔案中包含的資源資訊(類型、名稱、語言識別符)。 預設值為 -v 1 |
-x | 指定 MUIRCT 標記新增至 .mui 檔案之資源區段的所有資源類型的語言識別碼。 LangID 值可以用十進位或十六進位格式指定。 例如,英文(美國)可以指定 -x 0x409 或 -x 1033。 |
-e | 擷取 -c 參數所提供的checksum_file中包含的資源總和檢查碼,並將其插入指定的output_file中。 指定 -e 時,MUIRCT 會忽略 -c 參數以外的所有參數。 在此情況下,checksum_file必須是Win32 二進位檔,其中包含具有總和檢查碼值的資源組態數據區段。 output_file必須是現有的 LN 檔案或 .mui 檔案。 |
-z | 計算並插入指定輸出檔中的資源總和檢查碼數據。 MUIRCT 會根據 -c 參數所提供的輸入,以及選擇性的 -b 參數來計算總和檢查碼。 如果您為不存在的 -z 參數指定輸出檔,MUIRCT 就會失敗。 範例:根據 Notepad.exe 中可本地化的資源計算總和檢查碼,並將總和檢查碼插入輸出檔 Notepad2.exe。 muirct -c notepad.exe -q myprog.rcconfig -z notepad2.exe |
-f | 啟用建立 .mui 檔案,版本資源是唯一可本地化的資源。 根據預設,MUIRCT 不允許這樣做。 |
-d | 找出並顯示來源檔案中的內嵌資源組態數據。 當您指定此參數時,MUIRCT 會忽略所有其他命令行選項。 |
-m | 指定要在計算總和檢查碼時使用的版本號碼,以將output_LN_file和output_MUI_file產生關聯。 |
source_filename | 本地化二進位原始程序檔的名稱;無法使用通配符。 此檔案只能包含一種語言的資源。 如果檔案中有多種語言的資源,除非使用 -b 參數,否則 MUIRCT 會失敗。 如果檔案包含只有值 0 之語言標識符的資源,MUIRCT 不會分割檔案,因為語言識別碼為 0 表示中性語言。 對於 -d 參數,source_filename是 LN 檔案或 MUIRCT 用來顯示資源組態數據的語言特定資源檔。 |
language_neutral_filename | 自選。 LN 檔案的名稱。 如果您未指定此檔案的名稱,MUIRCT 會將第二個擴展名 「.ln」 附加至來源檔名,以作為語言中性檔名。 一般而言,您應該先移除 「.ln」 擴展名,再部署檔案。
注意: LN 檔案不應包含字串或功能表。 您應該手動移除它們。 |
mui_filename | 自選。 語言特定資源檔的名稱。 如果您未指定名稱,MUIRCT 會將第二個擴展名 「.mui」 附加至要作為檔名的來源檔名。一般而言,MUIRCT 會建立語言特定的資源檔。 不過,如果下列任一條件存在,則不會建立資源檔:
|
MUIRCT 語言輸出
MUIRCT 會根據下列順序選擇 “UltimateFallbackLanguage” 屬性值,以根據下列順序插入 LN 檔案資源組態數據,從最高優先順序到最低:
- 來源資源組態檔中的 「UltimateFallbackLanguage」 屬性,如果傳入做為輸入,則為 。
- 使用 -g 參數指定的語言。
- 輸入檔案語言。
MUIRCT 會根據下列順序挑選要插入 .mui 檔案資源組態數據的「語言」屬性值:
- 來源資源組態檔中的 「language」 屬性,如果傳入做為輸入,則為 。
- -x 參數所指定的語言(強制語言)。
- 輸入檔案語言。
MUIRCT 總和檢查碼處理
除非您透過資源組態檔指定總和檢查碼,否則作系統通常會計算檔案中特定語言資源的總和檢查碼。 只要 LN 檔案和所有相關語言特定資源檔的總和總和檢查碼都相同,而且 LN 與語言相依比對中資源組態中的語言屬性,資源載入器就可以成功載入資源。
MUIRCT 支援數種方法,將適當的總和檢查碼放在資源組態數據中:
- 建置每個語言的可執行檔,其中包含程式代碼和資源。 之後,請使用 MUIRCT 將這些檔案分割成 LN 檔案和特定語言的資源檔。 MUIRCT 會執行多次,一次,以產生每個語言的資源檔。 您可以透過下列方式執行組建:
- 使用 -q 參數在資源組態檔中指定總和檢查碼值。 MUIRCT 會將此值放在產生的所有 LN 檔案和語言特定資源檔中。 您必須採用策略來選擇此值,如本主題稍後所述。
- 使用 -c 參數(以及選擇性地選擇 -b 參數)來選擇具有 MUIRCT 擷取總和檢查碼之資源的單一語言。
- 使用 -z 參數來選擇具有 MUIRCT 一律擷取總和檢查碼之資源的單一語言。 使用其他方法建置檔案之後,套用此總和檢查碼。
- 建置可執行檔,其中包含單一語言的程式代碼和資源。 之後,請使用 MUIRCT 來分割 LN 檔案與語言特定資源檔案之間的資源。 最後,使用二進位本地化工具來修改每個語言產生的資源檔。
總和檢查碼處理最常見的慣例是以英文(美國)資源的總和檢查碼為基礎。 只要每個 LN 檔案都一致,您就可以自由採用不同的慣例。 例如,軟體開發企業完全可以接受其總和檢查碼,以以法文(法國)資源為基礎的軟體,而不是英文(美國)資源,只要所有應用程式都有以總和檢查碼為基礎的法文(法國)資源即可。 您也可以接受使用資源組態檔,將最多16個十六進位數位的任意十六進位值指派為總和檢查碼。 最後一個策略會排除有效使用 MUIRCT 的 -z、-c 和 -b 參數。 它需要使用 GuidGen 或其他工具來產生總和檢查碼值的方法。 此策略也要求您設定原則,以判斷何時在新增可本地化的資源時修改值。
若要將英文(美國)總和檢查碼套用至所有檔案,您可以使用上述任何總和檢查碼處理方法。 例如,您可以產生英文(美國)的 LN 檔案和語言特定資源檔,然後使用 MUIRCT -d 參數來取得產生的總和檢查碼。 您可以將此總和檢查碼複製到您的資源組態檔,並使用具有 MUIRCT 的 -q 參數,將總和檢查碼套用至所有其他檔案。
搭配 MUIRCT 使用資源組態檔
您可以使用 MUIRCT 來指定資源組態資料。 無論您是否明確提供資源組態檔,每個語言特定的資源檔都有資源組態數據,與任何具有相關聯資源檔的任何 LN 檔案一樣。 例如:
- 如果您使用 -q 參數來指定資源組態檔,但輸入來源檔案中沒有可本地化的資源,則不會產生任何語言特定的資源檔,且產生的 LN 檔案不包含資源組態數據。 此外,如果輸入來源檔案具有多語系資源,則 MUIRCT 不會分割檔案。
注意
目前,當資源組態檔的 neutralResources 元素不包含 resourceType 元素,且 localizedResources 元素包含字串和功能表時,MUIRCT 的行為目前不一致。 在這種情況下,MUIRCT 會分割資源,如下所示:
- 原始二進位檔中的所有資源(包括字串和功能表),加上 MUI 資源,都會放在 LN 檔案中。
- 字串、功能表和 MUI 資源會放在適當的語言特定資源檔中。
使用 MUIRCT 的範例
標準使用方式 範例
muirct -q mui.MMF bar.exe barnew.exe barnew.exe.mui
muirct -d myprog.exe.mui
使用 -d switch 的 LN 檔案輸出範例
以下是使用具有 MUIRCT 的 -d 參數,從 LN 檔案 Shell32.dll的資源組態資料輸出範例:
Signature - fecdfecd
Length - 148
RC Config Version - 10000
FileType - 11
SystemAttributes - 100
UltimateFallback location - external
Service Checksum - 14f44a8d86bef14af26d9a885964c935
Checksum - f5b3b7ab330439d6fcc07582c3afb613
MainNameTypes - AVI FTR ORDERSTREAM TYPELIB UIFILE XML MUI
MainIDTypes - 1 2 3 12 14 16 24
MuiNameTypes - MUI
MuiIDTypes - 2 3 4 5 6 9 14 16
UltimateFallbackLanguage - en-US
使用參數 -d 參數 Language-Specific 資源文件輸出的 範例
以下是使用 MUIRCT -d 參數,從 .mui 檔案 Shell32.dll.mui 的資源設定資料輸出範例:
Signature - fecdfecd
Length - c8
RC Config Version - 10000
FileType - 12
SystemAttributes - 100
Service Checksum - 14f44a8d86bef14af26d9a885964c935
Checksum - f5b3b7ab330439d6fcc07582c3afb613
MainNameTypes - MUI
MainIDTypes - 2 3 4 5 6 9 14 16
Language - en-US
RC 編譯程式公用程式
RC 編譯程式 (Rc.exe) 是命令行公用程式,用於將資源定義腳本檔案 (.rc 擴展名) 編譯成資源檔 (.res 擴展名)。 RC 編譯程式包含在 Windows SDK 中。 本檔僅說明使用 RC 編譯程式搭配資源載入器 MUI 相關功能。 如需編譯程式的完整資訊,請參閱 關於資源檔案。
RC 編譯程式可讓您從單一來源集、LN 檔案和個別的語言特定資源檔建置。 至於 MUIRCT,檔案會由資源組態數據相關聯。
用於 MUI 資源的 RC 編譯程式語法
RC 編譯程式參數會在使用 RC 中詳細定義。 本節只會定義用來建置 MUI 資源的參數。 請記住,每個參數不區分大小寫。 除非另有指示,否則資源類型會假設為語言中性。
rc [-h|-?] -fm mui_res_name [-q rc_config_file_name] [-g langid] [-g1 ] [-g2 version]
參數和自變數
選擇 | 功能 |
---|---|
-h 或 -? | 顯示說明畫面。 |
-調頻 | 針對語言特定資源使用指定的資源檔。 資源編譯程式通常會建立語言特定的資源檔。 不過,如果下列任何一個條件存在,則不會建立檔案:
|
-q | 使用指定的資源組態檔來取得資源類型,以放在語言特定的資源檔和 LN 檔案中。 如需詳細資訊,請參閱 準備資源組態檔。 作為這個參數的替代方案,您可以使用 -j 和 -k 參數,但最好使用資源組態檔。 藉由搭配資源組態檔使用 -q 參數,您可以實作以專案為基礎的分割,並提供最終會在 LN 和語言特定資源檔中使用二進位資源組態的屬性。 此分割無法使用 -j 和 -k 參數。 注意: 如果您將資源和版本資訊儲存在不同的資源組態檔中,RC 編譯程式分割程式將無法正常運作。 在此情況下,RC 編譯程式不會分割版本資訊。 因此,連結器錯誤會在鏈接語言特定資源檔期間發生,因為檔案沒有版本資源。 |
-g | 指定十六進位中的最終 後援語言 標識碼。 |
-g1 | 即使 VERSION 資源是唯一可當地語系化的內容,仍會建立 MUI .res 檔案。 根據預設,如果 VERSION 是唯一可本地化的資源,RC 編譯程式不會產生 .res 檔案。 |
-g2 | 指定計算總和檢查碼時要使用的自訂版本號碼。 |
mui_res_name | 語言特定資源的資源檔。 |
rc_config_file_name | 資源組態檔。 |
langid | 語言標識碼。 |
版本 | 自定義版本號碼,格式為 「6.2.0.0」。。 |
使用 RC 編譯程式建置 MUI 資源的範例
為了說明使用 MUI 資源的 RC 編譯程式作業,讓我們檢查資源檔 Myfile.rc 的下列命令行:
rc -fm myfile_res.res -q myfile.rcconfig myfile.rc
此命令行會導致 RC 編譯程式執行下列動作:
- 根據 .rc 檔案的名稱,建立語言特定的資源文件Myfile_res.res 和預設為 Myfile.res 的語言中性資源檔。
- 將 2 (專案 5 6 7 7 8 9 10 10 11 12)、4、5、6、9、11、16、23、240、1024 MY_TYPE資源類型新增至語言特定的 .res 檔案,如果它們位於 .rc 檔案中。
- 將資源類型 16 以及資源檔中所述的任何其他資源類型新增至語言中性 .res 檔案,以及特定語言的 .res 檔案。 請注意,在此範例中,資源類型 16 正在兩個位置中新增。
- 根據下列準則,選擇 「UltimateFallbackLanguage」 屬性值,以根據下列準則插入 LN 檔案資源組態數據,從最高優先順序排序為最低:
- 資源組態檔中的 「UltimateFallbackLanguage」 屬性,如果傳入做為輸入。
- 要根據 RC 編譯程式語言順序插入資源組態數據的語言屬性值(語言中性與語言特定的資源文件語言)。 考慮包括 .rc 檔案中的語言、-gl 參數的語言值,以及英文(美國)的標識碼0x0409。
言論
如果您在 neutralResources 元素中包含任何 ICON(3)、DIALOG(5)、STRING(6)或 VERSION(16) 資源類型,則必須在資源組態檔的 localizedResources 元素中複製該專案。
相關主題