Windows 應用程式 SDK 中的託管應用程式

託管應用程式模式讓你能建立輕量級應用程式,繼承主機應用程式的執行檔和入口點。 託管應用程式是一個獨立的套件,包含內容(腳本、資產、設定),但執行時依賴主機的執行時間。

託管應用程式的運作方式

主機應用程式在其清單中宣告擴充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 TrustLevelRuntimeBehavior

<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="&quot;script.py&quot;">
    </Application>
  </Applications>
</Package>

主要屬性:

Attribute Description
HostRuntimeDependency.Name 主機應用程式的套件家族名稱
HostId 符合主機應用程式中的 HostRuntime.Id
Parameters 傳遞給主機執行檔的命令列參數

建立託管應用程式套件

要建立託管應用程式套件:

  1. 建立標準 MSIX 專案或使用 MakeAppx.exe
  2. 只包含你的內容檔案(腳本、素材、設定)。
  3. 不要包含可執行檔——它來自主機。
  4. 在資訊清單中宣告 HostRuntimeDependency
  5. 用受信任的憑證簽署套件以進行生產。 在開發期間,你可以將該套件註冊為未簽署狀態(見下文)。

未簽署的套件註冊(開發)

在開發過程中,你可以註冊一個未簽署的託管應用程式套件:

Add-AppxPackage -Path "HostedApp.msix" -AllowUnsigned

Note

未簽署套件註冊僅用於開發。 生產時,請用受信任的憑證簽署封裝。

範例:Python 腳本主機

Python 執行時應用程式可以作為主機:

  1. 主機應用程式 — 封裝 python.exe 並宣告 HostRuntime Id="PythonHost"
  2. 託管應用程式 — 包含 Python 指令碼(app.py),並以 Parameters="app.py" 宣告 HostId="PythonHost"
  3. 當使用者啟動託管應用程式時,Windows 會以託管應用程式的套件目錄作為工作內容,執行主機的 python.exe app.py