自定義應用程序體驗的能力很重要,尤其是對企業而言。 我們已與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檔案。 請務必將檔案命名為乙太幣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 版本。 如果不是,我們會要求您手動提供發行者和主要應用程式資訊。 此外,某些自定義也需要在您的計算機上安裝主要應用程式。
使用封裝編輯器進行轉換之後,請修改封裝。 在某些情況下,主要套件可能要求您的修改套件在其 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 參數。
衝突解決
如果有多個修改套件嘗試變更相同的值,則會考慮修改套件名稱的 字母順序 來解決衝突。