共用方式為


資源公用程式

本主題描述用來建置 MUI 應用程式的兩個公用程式。 雖然 MUIRCT 是 MUI 特定的工具,但 MUI 也會使用標準的 Windows RC 編譯器公用程式。 當地語系化 資源和建置應用程式中提供使用這些公用程式的指示。

MUIRCT 公用程式

MUIRCT (Muirct.exe) 是命令列公用程式,可用來將標準可執行檔分割成 LN 檔案,以及語言特定的 (,也就是可當地語系化) 資源檔。 每個產生的檔案都包含檔案關聯的資源組態資料。 MUIRCT 包含在 Windows Vista Microsoft Windows SDK中。

注意

從 Windows Vista 開始,Win32 資源載入器會更新為從語言特定檔案以及 LN 檔案載入資源。

 

MUIRCT 使用方式

  1. 根據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]

  2. 從checksum_file擷取總和檢查碼,並將其插入output_file中。

    Muirct -c checksum_file [-b LangID] -e output_file

  3. 根據checksum_file計算總和檢查碼,並將其插入output_file中。

    Muirct -c checksum_file [-b LangID] -q rc_config -z output_file

  4. 從 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 檔案資源組態資料,從最高優先順序到最低:

  1. 來源資源組態檔中的 「UltimateFallbackLanguage」 屬性,如果其中一個屬性以輸入的形式傳入。
  2. 使用 -g 參數指定的語言。
  3. 輸入檔案語言。

MUIRCT 會根據下列順序挑選要插入 .mui 檔案資源組態資料的 「language」 屬性值:

  1. 如果來源資源組態檔中的 「language」 屬性是以輸入的形式傳入,則為 。
  2. -x 參數所指定的語言 (強制語言) 。
  3. 輸入檔案語言。

MUIRCT 總和檢查碼處理

除非您透過資源組態檔指定總和檢查碼,否則作業系統通常會計算檔案中語言特定資源的總和檢查碼。 只要 LN 檔案和所有相關聯的特定語言資源檔的總和總和檢查碼都相同,而且 LN 和語言相依比中的資源組態中的語言屬性,資源載入器就可以成功載入資源。

MUIRCT 支援數種方法,在資源設定資料中放置適當的總和檢查碼:

  1. 建置每個語言的可執行檔,其中包含程式碼和資源。 之後,請使用 MUIRCT 將這些檔案分割成 LN 檔案和語言特定的資源檔。 MUIRCT 會多次執行,一次,以產生每個語言的資源檔。 您可以透過下列方式執行組建:
    1. 使用 -q 參數在資源組態檔中指定總和檢查碼值。 MUIRCT 會將此值放在產生的所有 LN 檔案和語言特定資源檔中。 您需要採用策略來選擇此值,如本主題稍後所述。
    2. 使用 -c 參數 (,並選擇性地使用 -b 參數) 選擇具有 MUIRCT 擷取總和檢查碼的資源的單一語言。
    3. 使用 -z 參數來選擇具有 MUIRCT 一律擷取總和檢查碼的資源的單一語言。 使用其他方法建置檔案之後,套用此總和檢查碼。
  2. 建置包含單一語言之程式碼和資源的可執行檔。 之後,請使用 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 或 -? 顯示說明畫面。
-調頻 針對語言特定資源使用指定的資源檔。 一般而言,資源編譯器會建立語言特定的資源檔。 不過,如果有下列任一條件存在,它就不會建立檔案:
  • .rc 檔案中沒有可當地語系化的資源。
  • 在 .rc 檔案中找到的唯一資來源語言是中性語言。
  • .rc 檔案具有多個語言的資源,不會計算中性語言。 如果 .rc 檔案包含兩種語言的資源,其中一種語言是中性語言,編譯器會將檔案視為單一語言。 如果有任何可當地語系化的資源,編譯器會建立語言特定的資源檔。
-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 元素中複製該專案。

多語系使用者介面參考

MUI 資源管理

當地語系化資源並建置應用程式