託管應用程式模式讓你能建立輕量級應用程式,繼承主機應用程式的執行檔和入口點。 託管應用程式是一個獨立的套件,包含內容(腳本、資產、設定),但執行時依賴主機的執行時間。
託管應用程式的運作方式
主機應用程式在其清單中宣告擴充HostRuntime功能,使其執行檔可供其他套件使用。
託管應用程式會宣告對該主機的依賴,並指定要執行哪些內容。 當使用者啟動託管應用程式時,Windows 會啟動主機的執行檔,並將託管應用程式的內容作為上下文傳遞。
此模型適用於:
- 腳本引擎 — 主機提供執行時(例如,Python、Node.js),而託管應用程式則是獨立的腳本或應用程式。
- 遊戲引擎 — 主機提供遊戲引擎,而託管應用程式則是獨立的遊戲。
- 應用程式框架 — 主機提供框架執行時,而託管應用程式則是運行於框架上的內容。
Important
主機與託管應用程式都需要 MSIX 套件身份。 託管應用程式是簽有過的 MSIX 套件,但其執行檔來自主機。
宣告主機執行階段
在主機應用程式的 Package.appxmanifest 中,新增一個 HostRuntime 擴充功能:
<Package xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10" ...>
<Applications>
<Application Id="App" Executable="MyHost.exe" EntryPoint="...">
<Extensions>
<uap10:Extension Category="windows.hostRuntime">
<uap10:HostRuntime Id="MyHostRuntime" />
</uap10:Extension>
</Extensions>
</Application>
</Applications>
</Package>
Id 值是託管應用程式用來宣告其相依性時所參照的值。
宣告一個託管應用程式
在託管應用程式的清單中,宣告主機執行時相依性,並指定 a TrustLevel 與 RuntimeBehavior:
<Package xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10" ...>
<Dependencies>
<uap10:HostRuntimeDependency Name="HostAppPackageFamilyName"
Publisher="CN=HostPublisher"
MinVersion="1.0.0.0" />
</Dependencies>
<Applications>
<Application Id="App"
uap10:HostId="MyHostRuntime"
uap10:Parameters=""script.py"">
</Application>
</Applications>
</Package>
主要屬性:
| Attribute | Description |
|---|---|
HostRuntimeDependency.Name |
主機應用程式的套件家族名稱 |
HostId |
符合主機應用程式中的 HostRuntime.Id |
Parameters |
傳遞給主機執行檔的命令列參數 |
建立託管應用程式套件
要建立託管應用程式套件:
- 建立標準 MSIX 專案或使用
MakeAppx.exe。 - 只包含你的內容檔案(腳本、素材、設定)。
- 不要包含可執行檔——它來自主機。
- 在資訊清單中宣告
HostRuntimeDependency。 - 用受信任的憑證簽署套件以進行生產。 在開發期間,你可以將該套件註冊為未簽署狀態(見下文)。
未簽署的套件註冊(開發)
在開發過程中,你可以註冊一個未簽署的託管應用程式套件:
Add-AppxPackage -Path "HostedApp.msix" -AllowUnsigned
Note
未簽署套件註冊僅用於開發。 生產時,請用受信任的憑證簽署封裝。
範例:Python 腳本主機
Python 執行時應用程式可以作為主機:
-
主機應用程式 — 封裝
python.exe並宣告HostRuntime Id="PythonHost"。 -
託管應用程式 — 包含 Python 指令碼(
app.py),並以Parameters="app.py"宣告HostId="PythonHost"。 - 當使用者啟動託管應用程式時,Windows 會以託管應用程式的套件目錄作為工作內容,執行主機的
python.exe app.py。