資源公用程式
本主題描述用來建置 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 | 指定source_file會根據rc_config檔案配置分割成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 | 當地語系化二進位原始程式檔的名稱;無法使用萬用字元。 此檔案只能包含一種語言的資源。 如果檔案中有多種語言的資源,則 MUIRCT 會失敗,除非使用 -b 參數。 如果檔案包含具有值 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」 屬性值:
- 如果來源資源組態檔中的 「language」 屬性是以輸入的形式傳入,則為 。
- -x 參數所指定的語言 (強制語言) 。
- 輸入檔案語言。
MUIRCT 總和檢查碼處理
除非您透過資源組態檔指定總和檢查碼,否則作業系統通常會計算檔案中語言特定資源的總和檢查碼。 只要 LN 檔案和所有相關聯的特定語言資源檔的總和總和檢查碼都相同,而且 LN 和語言相依比中的資源組態中的語言屬性,資源載入器就可以成功載入資源。
MUIRCT 支援數種方法,在資源設定資料中放置適當的總和檢查碼:
- 建置每個語言的可執行檔,其中包含程式碼和資源。 之後,請使用 MUIRCT 將這些檔案分割成 LN 檔案和語言特定的資源檔。 MUIRCT 會多次執行,一次,以產生每個語言的資源檔。 您可以透過下列方式執行組建:
- 使用 -q 參數在資源組態檔中指定總和檢查碼值。 MUIRCT 會將此值放在產生的所有 LN 檔案和語言特定資源檔中。 您需要採用策略來選擇此值,如本主題稍後所述。
- 使用 -c 參數 (,並選擇性地使用 -b 參數) 選擇具有 MUIRCT 擷取總和檢查碼的資源的單一語言。
- 使用 -z 參數來選擇具有 MUIRCT 一律擷取總和檢查碼的資源的單一語言。 使用其他方法建置檔案之後,套用此總和檢查碼。
- 建置包含單一語言之程式碼和資源的可執行檔。 之後,請使用 MUIRCT 來分割 LN 檔案與語言特定資源檔之間的資源。 最後,使用二進位當地語系化工具來修改每個語言產生的資源檔。
總和檢查碼處理的最常見慣例是根據英文總和檢查碼 (美國) 資源。 只要每個 LN 檔案都一致,您就可以自由採用不同的慣例。 例如,只要所有應用程式都有法文 (法國) 資源的基礎,軟體發展企業就可以將其總和檢查碼建置在法文 (法國) 資源,而不是英文 (美國) 資源,只要所有應用程式都有法文 (法國) 資源即可。 您也可以接受使用資源組態檔,將最多 16 個十六進位數位的任意十六進位值指派為總和檢查碼。 最後一個策略會排除有效使用 -z、-c 和 -b 參數 MUIRCT。 它需要使用 GuidGen 或其他工具來採用方法來產生總和檢查碼值。 此策略也要求您設定原則,以判斷何時在新增可當地語系化的資源時修改值。
若要將英文 (美國) 總和檢查碼套用至所有檔案,您可以使用上述任何總和檢查碼處理方法。 例如,您可以產生英文 (美國) 的 LN 檔案和語言特定資源檔,然後使用 MUIRCT -d 參數來取得產生的總和檢查碼。 您可以將此總和檢查碼複製到您的資源組態檔,並使用 -q 參數搭配 MUIRCT 將總和檢查碼套用至所有其他檔案。
搭配 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 參數的 LN 檔案輸出範例
以下是 LN 檔案的資源設定資料輸出範例,Shell32.dll 搭配 MUIRCT 使用 -d 參數:
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 中。 本檔只會說明搭配資源載入器的 MUI 相關功能使用 RC 編譯器。 如需編譯器的完整資訊,請參閱 關於資源檔。
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 | 語言識別項。 |
version | 自訂版本號碼,格式為 「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 8 9 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。
備註
如果您包含任何 ICON (3) 、DIALOG (5) 、STRING (6) 或 VERSION (16) resource type in the neutralResources 元素,則您必須在資源組態檔的 localizedResources 元素中複製該專案。
相關主題