使用修改套件自定義您的企業應用程式

自定義應用程序體驗的能力很重要,尤其是對企業而言。 我們已與IT專業人員交談,且我們知道自定義應用程式以符合其使用者需求,對於移至Windows 10的努力至關重要。 自定義使用 MSI 封裝的應用程式時,很瞭解 IT 專業人員必須從開發人員取得套件,並使用自定義重新封裝安裝程式,以符合其需求。 對於企業來說,這是一項代價高昂的努力。 接下來,我們想要將自定義和主要應用程式分離,因此不再需要重新封裝。 這可確保企業會從開發人員取得最新的更新,同時仍維持其自定義的控制權。

在 Windows 10 版本 1809 中,我們引進了稱為 修改套件的新 MSIX 套件類型。 修改套件是儲存自定義的 MSIX 套件。 修改套件也可以是可能沒有啟用點的外掛程式/附加元件。 IT 專業人員可以使用這項功能彈性地變更 MSIX 容器,讓應用程式由其企業自定義所覆寫。

運作方式

修改套件是專為沒有應用程式程式碼且只有安裝程式的企業所設計。 您可以使用最新版的 MSIX 封裝工具建立修改套件(適用於 Windows 10 版本 1809 或更新版本)。 如果您有應用程式的程式代碼,您也可以建立 應用程式延伸模組

如果您想要建立對主要應用程式具有嚴格系結的修改套件,您可以將主要應用程式宣告為修改套件指令清單中的相依性。

<Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.15063.0"/>
    <uap4:MainPackageDependency Name="Main.App"/>
</Dependencies>

下列範例示範如何指定不同的憑證或發行者。

<Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.15063.0"/>
    <uap4:MainPackageDependency Name="Main.App" Publisher="CN=Contoso, C=US" />
</Dependencies>

如果修改套件與主要套件之間的關聯性是一對一,則這是簡單的組態。 一般自定義通常需要HKEY_CURRENT_USER或HKEY_CURRENT_USERCLASS下的登錄機碼。 在我們的 MSIX 套件內,我們有 User.dat 和 Userclass.dat 檔案來擷取登錄機碼。 如果您需要 HKCU\Software* 下的登錄機碼,則需要建立 User.dat(就像 Registry.dat 用於 HKLM\Software*一樣)。 如果您需要 HKCU\Sofware\Classes*下的密鑰,請使用 Userclass.dat。

以下是建立 .dat 檔案的一般方式:

  • 使用 Regedit 建立檔案。 在 Regedit 中建立 Hive,並插入必要的索引鍵。 比單擊滑鼠右鍵,導出並儲存為Hive檔案。 請務必將檔案命名為User.dat或Userclass.dat

  • 使用 API 來建立必要的檔案。 您可以使用 ORSaveHive 函式來儲存 .dat 檔案。 請務必將檔案命名為 ether User.dat 或 Userclass.dat

進行必要的變更之後,您可以建立修改套件,就像任何其他 MSIX 套件一樣。 然後,您可以使用目前的部署設定來部署套件。 當您重新啟動主要應用程式時,您可以看到修改套件所做的變更。 如果您選擇移除修改套件,您的主要應用程式將會還原為狀態,而不需要修改套件。

了解裝置上已安裝哪些修改套件

使用 PowerShell,您可以使用下列命令來查看已安裝的修改套件。

Get-AppPackage -PackageTypeFilter Optional

Windows 10 版本 1809 上的修改套件

在 Windows 10 版本 1809 上,修改套件可以包含登錄中設定所需的設定,讓主要套件如預期般執行。 這表示您的主要應用程式會利用登錄來檢視外掛程式是否存在。 當您部署主要套件和修改套件時,應用程式會在執行階段上檢視主要套件和修改套件的虛擬登錄 (VREG)。

請注意,您的主要套件可能會使用 VREG 來執行下列事項:

  • 檢視載入外掛程式檔案 (DLL) 的位置。 如果是這種情況,請確定檔案是套件的一部分。 如此一來,主要套件就可以在執行階段上存取檔案。
  • 檢視能看到 VREG 機碼值的位置。 您的主要套件可能會尋找存在於 VREG 中的值。 當您手動或使用工具來建立修改套件時,請確認該值是否正確。

Windows 10 版本 1903 及更新版本的修改套件

Windows 10 1903 版中已加入下列功能。

資訊清單更新

我們已將下列元素的支援加入 MSIX 修改套件資訊清單。

<Properties>
   <rescap6:ModificationPackage>true</rescap6:ModificationPackage>
</Properties>

若要確保修改套件能在 1903 版或更新版本中運作,修改套件資訊清單中必須包含此元素。 如果您使用 MSIX 封裝工具的 1 月版本來封裝 MSIX 修改套件,則此動作會自動完成。 如果您使用早於該版本的工具來轉換套件,您可以透過在工具中編輯現有套件,來加入這個新的元素。 此外,如果使用者安裝修改套件,他們就會看見套件可能會修改主應用程式的警示。

如果您使用在 1903 版之前建立的修改套件,則必須編輯套件指令清單,將屬性更新 MaxVersionTested 為 10.0.18362.0。

<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17701.0" MaxVersionTested="10.0.18362.0" />

使用 MSIX 封裝工具建立修改套件

您可以使用 MSIX 封裝工具建立修改套件:

  • 指定主要套件。 確定要進行轉換的機器上有 MSIX 版本的主要套件。 如果沒有,我們會要求您手動提供發行者和主應用程式資訊。 也有些自訂會要求主應用程式需安裝在您的機器上。 Modification Package MPT

  • 使用套件編輯器修改經過轉換的套件。 主要套件可能會需要修改套件在其 VREG 中具有特定值。 您可以移至此處並適當地編輯套件。

使用 MakeAppx.exe 建立修改套件

您可以使用 Windows 10 SDK 中包含的 MakeAppX.exe 工具,手動建立修改套件。

  • 在資訊清單中,指定主要套件。 包含發行者與主要套件名稱。

    <Dependencies>
      <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17701.0" MaxVersionTested="12.0.0.0"/>
      <uap4:MainPackageDependency Name="HeadTrax" Publisher="CN=Contoso Software, O=Contoso Corporation, C=US" />
    </Dependencies>
    
  • 建立 Registry.dat、User.dat 和 Userclass.dat,無論建立什麼,您都需要登錄機碼來載入您的修改套件。 這只有在需要主應用程式檢視自訂登錄機碼時才需這麼做。 請記住,因為所有項目都在容器內執行,因此在執行階段上,主要套件和修改套件的虛擬登錄將會合併,好讓主要套件可以檢視修改套件的虛擬登錄。

此程序也支援檔案系統外掛程式和自訂項目,只要主應用程式可執行檔不在虛擬檔案系統 (VFS) 內即可。 這是為了確保主要套件會收到主要套件和修改套件的所有 VFS。

在電腦上安裝修改套件

在計算機上安裝修改套件會遵循其他安裝慣例。 值得注意的是,在安裝套件時,您可能想要使用 -OptionalPackagePath 參數。

衝突解決功能

如果有多個修改套件嘗試變更相同的值,則會考慮 修改套件名稱的字母順序 來解決衝突。