MSIX AppContainer uygulamaları

Önemli

AppContainer'da çalışan herhangi bir işlem için DeploymentManager.Initialize öğesinin çağrılmasına neden olursanız uygulamanızın packageManagementpaket bildiriminizdekısıtlanmış özelliği bildirmesi gerekir. Diğer ayrıntılar için bkz. Deployment Manager otomatik başlatıcısı.

Eski uygulamalar için AppContainer konusu, AppContainer ortamının ne olduğu ve avantajları hakkında tüm gerekli arka plan bilgilerini kapsar; bu konu, bir işlemin AppContainer içinde çalışıp çalışmadığını test için C# ve C++ kod örneklerini de içerir.

Okuduğunız konu artık MSIX kullanılarak paketlenmiş bir uygulamayı nasıl alabileceğinizi ve appContainer ortamında (basit bir uygulama kapsayıcısında) çalışacak şekilde nasıl yapılandırabileceğinizi göstermektedir. Evrensel Windows Platformu (UWP) uygulamalar otomatik olarak AppContainer uygulamalarıdır. Ancak MSIX ile birlikte gelen masaüstü uygulamanızı appContainer uygulaması olacak şekilde de yapılandırabilirsiniz.

AppContainer uygulamasının süreci ve alt işlemleri, yalnızca kendilerine özel olarak verilen kaynaklara erişebilecekleri basit bir uygulama kapsayıcısı içinde çalışır. Ayrıca dosya sistemi ve kayıt defteri sanallaştırması kullanılarak yalıtılmışlardır. Sonuç olarak, AppContainer'da çalıştırılan uygulamalar, sınırlı atanan kaynakların dışında kötü amaçlı eylemlere izin vermek için ele geçirilemez.

Tavsiye

Paketlenmemiş uygulamalar appContainer'da da çalıştırılabilir. Ancak MSIX kullanarak paketlediyseniz AppContainer'ı kullanmak özellikle kolaydır. Bu nedenle, bu konu başlığında açıklanan tüm senaryolar paketlenmiş uygulamalarla ilgilidir.

AppContainer için WinUI 3 projesi yapılandırma

Paketlenmiş bir C# veya C++ WinUI 3 masaüstü uygulaması için yeni proje oluşturma'daki adımlar, yeni bir WinUI 3 projesi oluşturmanın varsayılan ve önerilen yolunu gösterir.

Varsayılan olarak, projenin Package.appxmanifest dosyası tam güven (orta bütünlük düzeyi) paketi için yapılandırma içerir. İlgili bölümler şöyle görünür:

...
<Applications>
  <Application ...
    EntryPoint="$targetentrypoint$">
    ...
  </Application>
</Applications>

<Capabilities>
  <rescap:Capability Name="runFullTrust" />
</Capabilities>
...

Paketi appContainer uygulaması içerecek şekilde yapılandırmak için EntryPoint özniteliğini düzenleyebilir ve kısıtlanmış yetenek bildirimini kaldırabilirsiniz (ancak Capabilities öğesini koruyabilirsiniz). Böyle:

...
<Applications>
  <Application ...
    EntryPoint="windows.partialTrustApplication">
    ...
  </Application>
</Applications>

<Capabilities/>
...

Eğer paketinizi Windows 10, sürüm 2004 (10.0; Derleme 19041) ve/veya sonraki sürümlere kuruyorsanız, EntryPoint ayarlamak yerine, (gösterildiği gibi XML ad alanı ön ekini bildirdikten sonra) uap10:TrustLevel ve uap10:RuntimeBehavior ayarlayabilirsiniz. Böyle:

<Package ...
  xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
  ...>
...
  <Applications>
    <Application ...
      EntryPoint="$targetentrypoint$"
      uap10:TrustLevel="appContainer"
      uap10:RuntimeBehavior="packagedClassicApp">
      ...
    </Application>
  </Applications>

  <Capabilities/>
...

Daha fazla bilgi için şu konulara bakın:

AppContainer için WinUI 3 iki projeli bir çözüm yapılandırma

Önceki bölümde, tek projeli MSIX işlemi açıklanmıştır, ki bunu öneriyoruz. Bu, yeni WinUI 3 projeleri için varsayılan olan işlemdir. Daha fazla bilgi için bkz . Uygulamanızı tek projeli MSIX kullanarak paketleme.

Ancak, tek projeli MSIX özelliğinin kullanıma sunulmasından önceki bir WinUI 3 projeniz olabilir. Bu durumda çözümünüzde uygulamanız project ve ek bir Windows Uygulama Paketleme Project olmak üzere iki projeniz olur. Projenizi tek projeli MSIX'e geçirebiliyorsanız bu idealdir. Ayrıca önceki bölümde yer alan yönergeleri izleyebilirsiniz. Daha fazla bilgi için bkz . Uygulamanızı tek projeli MSIX kullanarak paketleme.

Projenizi tek projeli MSIX'e geçiremiyorsanız , bu bölümde paketinizi AppContainer uygulaması içerecek şekilde yapılandırma açıklanmaktadır.

Windows Uygulama Paketleme Project, Package.appxmanifest'da yapılandırmayı geçersiz kılan varsayılan bir ayar anlamına gelir. Proje, proje dosyasında Tam değerine ayarlanmış bir TrustLevel özelliği varmış gibi davranır.

Bu zımni özellik değerini düzeltmek için paketleme projesinin Dependencies>Applications düğümünü genişletin ve WinUI 3 projenize başvuruyu temsil eden düğümü seçin. Ardından Visual Studio Properties penceresinde (proje özellikleri değil), Trust Düzeyi özelliği için Partial Trust değerini seçin.

Paketleme projesinin proje dosyası artık şu açık özelliği içerir:

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

Artık <rescap:Capability Name="runFullTrust" />'i paketleme projesinin Package.appxmanifest dosyasından kaldırabilirsiniz.

AppContainer için bir Windows Uygulama Projesi (C++ Win32 WndProc türü uygulama) yapılandırın.

Bu bölüm, Windows Application Project project şablonuyla oluşturulmuş bir C++ Win32 WndProc türü project varsa size yöneliktir. Özetle ilk adım, çözümünüzde C++ Windows Uygulama Paketleme Project eklemektir. MSIX paketlemeyi Visual Studio'da masaüstü uygulamanızı ayarlama konusu için, tam adımlar hakkında daha fazla ayrıntı bulunmaktadır. Bu konu C++ veya C# dilinde yazılmış masaüstü uygulamaları için geçerlidir.

Ardından yeni paketleme projenizin proje dosyasını açın ve var olan ProjectReference özelliğine aşağıdaki gibi bir TrustLevel özelliği ekleyin:

...
<ItemGroup>
  <ProjectReference Include="...">
    <TrustLevel>Partial</TrustLevel>
  </ProjectReference>
</ItemGroup>
...

Oluştururken "hata APPX1673: Uygulama bildiriminde gerekli öğe 'PhoneIdentity' eksik" hatasını görebilirsiniz. Böyle bir durumda projenin Package.appxmanifest dosyasını şu şekilde düzenleyin:

<Package ...
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  ...>
...
  <mp:PhoneIdentity
      PhoneProductId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx."
      PhonePublisherId="A GUID in the form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.">
  </mp:PhoneIdentity>
...

AppContainer için bir WPF veya WinForms projesi yapılandırma

Aşağıdakilerden herhangi biri varsa bu bölüm size yöneliktir:

  • C# WPF Application proje şablonuyla oluşturulmuş bir Windows Presentation Foundation (WPF) uygulama projesi. Bu size .NET bir proje verir ve WPF App (.NET Framework) adlı proje şablonundan farklıdır. Veya
  • C# Windows Forms App proje şablonuyla oluşturulmuş bir Windows Forms (WinForms) uygulama projesi. Bu size .NET bir proje verir ve Windows Forms App (.NET Framework) adlı proje şablonundan farklıdır.

Özetle, ilk adım çözümünüzde C# Windows Uygulama Paketleme Project eklemektir. Visual Studio içinde MSIX paketlemesi için masaüstü uygulamanızı ayarlama adlı belgede adımların tam detayları bulunmaktadır.

Ardından paketleme projesinin Dependencies>Applications düğümünü genişletin ve WPF veya WinForms projenize başvuruyu temsil eden düğümü seçin. Ardından Visual Studio Properties penceresinde (proje özellikleri değil), Trust Düzeyi özelliği için Partial Trust değerini seçin.