MSIXでアプリの製品名を変更したり、日本語・英語などの多言語表示に対応したりする場合、既存アプリの更新として配布し続けたいなら、IdentityのNameとPublisherは変更しません。人が見る名称だけをProperties/DisplayNameやuap:VisualElementsのDisplayNameで変更します。
多言語化するときは、表示名にms-resource:参照を設定し、言語別の.reswファイルから文字列を読み込ませます。新しいMSIXパッケージではVersionを上げますが、パッケージファミリを決めるNameとPublisherは維持するのが基本です。Microsoftも、Identityはシステム向け、DisplayNameはユーザー向けとして明確に使い分けるよう説明しています。(Microsoft for Developers)
結論:Identityは固定し、表示上の製品名だけを変更する
MSIXのAppxManifest.xmlには、似たような名前の設定が複数あります。それぞれの役割は次のとおりです。
| 設定項目 | 主な役割 | 既存アプリの更新時 |
|---|---|---|
Identity/@Name | パッケージを識別する機械向け名称 | 原則として変更しない |
Identity/@Publisher | 発行元と署名を識別する値 | 原則として変更しない |
Identity/@Version | パッケージの更新順序を判断する値 | 新版で増加させる |
Properties/DisplayName | パッケージ全体の人向け表示名 | 変更・翻訳できる |
uap:VisualElements/@DisplayName | アプリのエントリに表示する名称 | 変更・翻訳できる |
PublisherDisplayName | ユーザーに見せる発行元名 | 変更・翻訳できる |
重要なのは、Identity要素を一切変更しないという意味ではないことです。通常のアップデートではVersionを増やします。一方、同じ製品として更新を継続するため、NameとPublisherは安定させます。
Microsoftのマニフェスト仕様でも、Identity/@Nameは大文字と小文字を区別する機械向け識別子であり、ユーザーに見せる名称にはDisplayNameを使うよう定義されています。また、Publisherはパッケージの署名に使う証明書のサブジェクト情報と一致させる必要があります。(Microsoft Learn)
IdentityのNameを変えると更新経路が壊れる理由
MSIXでは、パッケージのNameと発行元から算出されるPublisherIdを基に、Package Family Nameが作られます。
概念的には次の形式です。
<Name>_<PublisherId>
Package Family Nameは、バージョンが異なるパッケージを同じ製品系列として扱うための識別子です。パッケージの設定データやセキュリティ境界なども、通常はこのパッケージファミリを単位として扱われます。(Microsoft Learn)
MSIXの更新は、基本的に同じパッケージファミリ内で行われます。既存パッケージと同じNameおよびPublisherを維持し、新しいパッケージのVersionを上げることで、Windowsは新版を更新パッケージとして認識します。(Microsoft Learn)
たとえば、旧パッケージが次の設定だったとします。
<Identity
Name="Contoso.Inventory"
Publisher="CN=Contoso Software Ltd., O=Contoso Software Ltd., C=JP"
Version="1.4.0.0"
ProcessorArchitecture="x64" />
製品名を「Contoso Inventory」から「在庫管理 Pro」に変える際、次のようにNameまで変更すると、同じ製品の更新として扱われなくなります。
<!-- 更新経路を維持したい場合は避ける -->
<Identity
Name="ZaikoKanriPro"
Publisher="CN=Contoso Software Ltd., O=Contoso Software Ltd., C=JP"
Version="1.5.0.0"
ProcessorArchitecture="x64" />
Nameが変わるとPackage Family Nameも変わるため、Windowsから見ると別のパッケージです。環境や配布方式によっては、旧版とは別のアプリとして並行インストールされたり、更新処理が失敗したりします。
製品名を変えたいだけなら、IdentityではなくDisplayNameを変更するのが正しい対応です。
単一言語で製品名を変更する方法
多言語化が不要で、日本語の製品名に統一するだけなら、DisplayNameに直接文字列を記述できます。
IdentityのNameとPublisherを維持する
旧版が次の内容だった場合、NameとPublisherはそのまま残します。
<Identity
Name="Contoso.Inventory"
Publisher="CN=Contoso Software Ltd., O=Contoso Software Ltd., C=JP"
Version="1.5.0.0"
ProcessorArchitecture="x64" />
変更するのはVersionです。旧版が1.4.0.0なら、新版を1.5.0.0など、通常はより大きい値にします。
PropertiesのDisplayNameを変更する
パッケージ全体の表示名は、Properties内のDisplayNameで設定します。
<Properties>
<DisplayName>在庫管理 Pro</DisplayName>
<PublisherDisplayName>Contoso Software</PublisherDisplayName>
<Description>在庫と入出庫を管理するアプリ</Description>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
Properties/DisplayNameは、ユーザーに見せるためのフレンドリーな名称として定義されており、ローカライズにも対応しています。(Microsoft Learn)
uap:VisualElementsのDisplayNameも確認する
MSIXパッケージには、パッケージ全体の表示名とは別に、アプリごとの表示名があります。
<uap:VisualElements
DisplayName="在庫管理 Pro"
Description="在庫と入出庫を管理するアプリ"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png" />
uap:VisualElements/@DisplayNameは、スタートメニューなどに登録されるアプリの表示名として使われる設定です。1つのMSIXパッケージに複数のアプリが含まれる場合は、アプリごとに異なる名称を設定できます。(Microsoft Learn)
製品名を完全に切り替えたい場合は、次の両方を確認してください。
Properties/DisplayNameuap:VisualElements/@DisplayName
Properties/DisplayNameだけを変更すると、設定画面では新しい名前が表示されても、スタートメニューには旧名称が残る可能性があります。どのDisplayNameが使われるかはWindows上の表示場所によって異なるため、同じ製品名に統一する場合は両方をそろえるのが安全です。
製品名を多言語化する方法
日本語環境では「在庫管理 Pro」、英語環境では「Inventory Pro」と表示したい場合、マニフェストに名称を直接書き込むのではなく、ms-resource:参照を使用します。
AppxManifest.xmlをリソース参照に変更する
パッケージ側の表示名を次のように変更します。
<Properties>
<DisplayName>ms-resource:Resources/PackageDisplayName</DisplayName>
<PublisherDisplayName>ms-resource:Resources/PublisherDisplayName</PublisherDisplayName>
<Description>ms-resource:Resources/PackageDescription</Description>
<Logo>Assets\StoreLogo.png</Logo>
</Properties>
アプリ側の表示名もリソース参照にします。
<uap:VisualElements
DisplayName="ms-resource:Resources/ApplicationDisplayName"
Description="ms-resource:Resources/ApplicationDescription"
BackgroundColor="transparent"
Square150x150Logo="Assets\Square150x150Logo.png"
Square44x44Logo="Assets\Square44x44Logo.png" />
ms-resource:Resources/PackageDisplayNameのうち、PackageDisplayName部分が.reswファイルのリソース名と対応します。名前は任意に決められますが、マニフェストと.reswで完全に一致させる必要があります。(Microsoft Learn)
言語別にResources.reswを配置する
代表的なフォルダー構成は次のとおりです。
PackageRoot
├─ AppxManifest.xml
├─ Assets
└─ Strings
├─ ja-JP
│ └─ Resources.resw
└─ en-US
└─ Resources.resw
フォルダー名には、ja-JPやen-USなどのBCP-47言語タグを使用します。
各言語のResources.reswには、同じリソース名を登録し、値だけを翻訳します。
| リソース名 | ja-JPの値 | en-USの値 |
|---|---|---|
PackageDisplayName | 在庫管理 Pro | Inventory Pro |
ApplicationDisplayName | 在庫管理 Pro | Inventory Pro |
PackageDescription | 在庫管理パッケージ | Inventory management package |
ApplicationDescription | 在庫と入出庫を管理するアプリ | Manage inventory and stock movements |
PublisherDisplayName | Contosoソフトウェア | Contoso Software |
日本語版Resources.reswの関連部分は、次のようになります。
<data name="PackageDisplayName" xml:space="preserve">
<value>在庫管理 Pro</value>
</data>
<data name="ApplicationDisplayName" xml:space="preserve">
<value>在庫管理 Pro</value>
</data>
英語版では、同じnameに英語の値を設定します。
<data name="PackageDisplayName" xml:space="preserve">
<value>Inventory Pro</value>
</data>
<data name="ApplicationDisplayName" xml:space="preserve">
<value>Inventory Pro</value>
</data>
この構成なら、ユーザーの言語環境に応じて適切な文字列が選ばれます。該当する言語がない場合は、Windowsのリソース管理システムがフォールバック規則に従って利用可能な候補を選択します。IdentityのNameとPublisherは、どの言語でも変わりません。(Microsoft Learn)
resources.priの生成を忘れない
.reswを配置しただけでは、手動パッケージング環境でリソースが自動的に解決されるとは限りません。ビルド時に.reswからresources.priを生成し、MSIXパッケージへ含める必要があります。
| パッケージ作成方法 | 対応 |
|---|---|
| Visual Studioのパッケージプロジェクト | 通常はビルド時にPRIを生成する |
| 手動パッケージング | MakePRI.exeでresources.priを生成する |
| MSIXを展開して直接編集 | 再パッケージ化と再署名が必要 |
| CI/CDで作成 | PRI生成工程がパイプラインに含まれているか確認する |
手動の場合は、概ね次の流れになります。
MakePRI createconfigで構成ファイルを作成するMakePRI newでresources.priを生成するMakePRI dumpでリソース名と候補値を確認するMakeAppxでMSIXパッケージを再作成するSignToolなどでパッケージに署名する
Microsoftの手順でも、マニフェストのms-resource:参照と.reswを用意した後、PRIファイルを生成してMSIXへ含める流れが示されています。(Microsoft Learn)
インストール後に表示名ではなく、次のような文字列がそのまま表示された場合は、リソース解決に失敗しています。
ms-resource:Resources/ApplicationDisplayName
この場合は、次を確認してください。
Resources.reswのリソース名にスペルミスがないかResources/以降の名前が.reswのnameと一致しているか- 言語フォルダーが
ja-JPなどの正しい形式か resources.priが生成されているかresources.priがMSIX内に含まれているか- 変更後のパッケージを再署名したか
ケース別の使い分け
製品名を変えるときは、目的によって変更対象が異なります。
| 目的 | Identity Name | Publisher | DisplayName |
|---|---|---|---|
| 同じアプリの製品名変更 | 維持 | 維持 | 変更 |
| 同じアプリの多言語化 | 維持 | 維持 | ms-resource:化 |
| ロゴやブランド表記だけ変更 | 維持 | 維持 | 必要に応じて変更 |
| 旧版と新版を並行インストールする別製品 | 新規設定を検討 | 通常は維持 | 新規設定 |
| 別会社による完全な別製品として配布 | 新規設定 | 新規設定 | 新規設定 |
| 証明書更新に伴いPublisherが変わる | 個別の移行設計が必要 | 個別対応 | 任意 |
「新製品として旧製品と同時にインストールさせたい」という要件であれば、新しいIdentity/@Nameを使う選択肢があります。その場合は、既存製品の更新ではなく、別パッケージとして設計します。
反対に、名称変更後も既存ユーザーへ自動更新を届けたい場合は、新しい製品名をIdentityへ入れてはいけません。
PublisherとPublisherDisplayNameを混同しない
PublisherとPublisherDisplayNameも役割が異なります。
<Identity
Publisher="CN=Contoso Software Ltd., O=Contoso Software Ltd., C=JP"
... />
<Properties>
<PublisherDisplayName>Contosoソフトウェア</PublisherDisplayName>
</Properties>
Publisherは、署名証明書とパッケージ識別に使われる機械向けの値です。証明書のサブジェクト情報と一致していないと、パッケージの署名やインストールで問題が発生します。PublisherDisplayNameはユーザーに見せる名称なので、日本語化やブランド表記の変更に利用できます。(Microsoft Learn)
会社名の変更などで表示上の発行元名だけを変える場合は、PublisherDisplayNameを変更します。署名証明書そのものが変わり、Identity/@Publisherの変更が必要になる場合は、単なる製品名変更とは別の移行案件です。
Microsoftは、新しい証明書で署名しながら旧パッケージの更新関係を維持するためのPersistent Identityも提供しています。ただし、旧証明書と新証明書の関係を証明する成果物の作成などが必要であり、DisplayName変更の代わりに気軽に使うものではありません。(Microsoft Learn)
App Installerを使っている場合の注意点
.appinstallerファイル経由で自動更新している場合は、MSIXだけでなくApp Installer側も確認します。
App Installerは、参照先MSIXのName、Publisher、Versionが定義内容と一致しているか検証します。したがって、新版では通常、次のように対応します。
Nameは既存値を維持するPublisherは既存値を維持するVersionは新しいMSIXに合わせて更新する- 配布先URIが新版パッケージを指しているか確認する
MSIX側だけバージョンを上げ、.appinstaller側のVersionを更新し忘れると、インストールや更新の検証で失敗する可能性があります。(Microsoft Learn)
よくある失敗と修正方法
製品名に合わせてIdentity Nameを変更した
症状
- 旧版から更新できない
- 旧版と新版が別アプリとして表示される
- Package Family Nameが変わった
- 既存ユーザーの設定を引き継げない
修正
旧版と同じIdentity/@Nameへ戻し、製品名はDisplayNameで変更します。
PublisherDisplayNameと一緒にPublisherも変更した
症状
- 署名エラーが発生する
- インストール時に発行元不一致になる
- 既存パッケージの更新として認識されない
修正
表示名の変更だけなら、PublisherDisplayNameだけを変更します。Identity/@Publisherは署名証明書と一致する旧値を維持します。
PropertiesのDisplayNameだけを変更した
症状
- 設定画面では新しい名前になる
- スタートメニューには古い名前が残る
修正
uap:VisualElements/@DisplayNameも確認し、必要に応じて同じ表示名または同じms-resource:参照へ変更します。
日本語名をマニフェストへ直接書いた
症状
- 英語版Windowsでも日本語名が表示される
- 言語ごとにパッケージを作り分ける必要が生じる
修正
DisplayNameをms-resource:参照へ変更し、言語別のResources.reswを用意します。
Versionを上げなかった
症状
- 同じバージョンが既にインストールされていると判断される
- 通常の更新としてインストールできない
修正
Identity/@Versionを旧版より大きい値へ変更し、再ビルドします。
クリーンインストールだけで確認した
クリーンインストールに成功しても、旧版からの更新経路が維持されているとは限りません。
必ず次の順番でテストします。
- 旧製品名のMSIXをインストールする
- アプリを起動して設定やデータを保存する
- 新製品名のMSIXを更新インストールする
- 同じアプリとして置き換わったことを確認する
- 保存した設定やデータが残っていることを確認する
更新前に確認するチェックリスト
公開前には、次の項目を確認してください。
Identity/@Nameが旧版と完全に一致しているIdentity/@Publisherが旧版と完全に一致しているPublisherが署名証明書のサブジェクトと一致しているIdentity/@Versionが旧版より大きいProperties/DisplayNameが新しい製品名になっているuap:VisualElements/@DisplayNameも確認した- 多言語化する場合は
ms-resource:参照になっている - 各言語の
Resources.reswに同じリソース名がある resources.priがパッケージに含まれている- 旧版から新版への上書き更新を実際に試した
- App Installerを使う場合は、その
Versionも更新した - スタート、設定、インストール画面で表示名を確認した
パッケージファミリが維持されているかは、PowerShellでも確認できます。
Get-AppxPackage -Name "Contoso.Inventory" |
Format-List Name, PackageFamilyName, PackageFullName, Version, Publisher
更新前後でPackageFamilyNameが同じで、Versionだけが増えていれば、同じパッケージ系列として更新できている可能性が高いと判断できます。
なお、製品名を「在庫管理 Pro」に変えても、Get-AppxPackageのNameにはContoso.Inventoryが表示されます。これは失敗ではありません。PowerShellのNameはユーザー向け製品名ではなく、機械向けのパッケージIdentityを表示しているためです。
DisplayNameとIdentityの判断基準
MSIXの製品名変更では、「どの文字列を新しいブランド名に合わせるか」ではなく、その値を人が使うのか、Windowsが識別に使うのかで判断します。
同じアプリの名称変更や翻訳であれば、次の方針で進めます。
Identity/@NameとPublisherは維持するVersionは新版で増加させる- 人向けの名称は
DisplayNameで変更する - スタート表示も変えるなら
uap:VisualElements/@DisplayNameを確認する - 多言語化には
ms-resource:と.reswを使う - 旧版からの更新テストでPackage Family Nameの維持を確認する
Identityは製品名を入れる場所ではなく、Windowsがパッケージを継続的に識別するための値です。リブランドや多言語化によってユーザー向けの名前が変わっても、同じ製品として更新を続ける限り、機械向けのIdentityは安定させる必要があります。

コメント