Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, paketlenmemiş uygulamaların Windows Share özelliğiyle nasıl tümleştirilme adımları açıklanmaktadır. Paylaş özelliği, kullanıcıların bir Windows uygulamasından diğerine içerik paylaşmasına olanak tanır. Paketlenmemiş bir uygulamanın Paylaşım Hedefi olarak kaydedilebilmesi için paket kimliği sağlanmalıdır. Kaydedildikten sonra uygulama paylaşılan dosyaları alabilir ve işleyebilir.
Paketlenmemiş bir uygulamayı Paylaşım Hedefi olarak ekleme:
- Uygulamaya paket kimliği sağlayın
- Paylaş sözleşmesini uygulama
Paketlenmemiş uygulamalara paket kimliği sağlamak
Bir uygulama paket kimliğini iki yolla alabilir:
- Yeni bir MSIX yükleme paketi oluşturma (tercih edilen yöntem) OR
- Dış konumla paketlenmiş uygulamaları geçerli yükleyiciyle uyumlu hale getirin. Bu yalnızca mevcut bir yükleyicisi olan ve MSIX yüklemesine geçemeyen uygulamalar için önerilir.
Yeni bir MSIX yükleme paketi oluşturma
Visual Studio'da Windows Uygulama Paketleme Projesi şablonunu kullanarak uygulamayı MSIX ile paketlemek önerilir. Bu, MSIX paketindeki tüm ikili dosyaları içerir ve temiz ve güvenilir bir yükleme deneyimi sağlar.
Masaüstü uygulamalarını paketlemeden önce dikkate alınan noktalar: Masaüstü uygulamasını paketlemeye hazırlanma (MSIX).
Mevcut uygulamanızın projesine yönelik bir paket oluşturmak için Visual Studio'da MSIX paketlemesi için masaüstü uygulamanızı ayarlama bölümünde yer alan adımları izleyin.
Uyarı
Paketleme projesini oluştururken Windows 10, sürüm 2004 (10.0; Derleme 19041) veya üzerini En Düşük sürüm olarak ayarlayın.
Bu işlem tamamlandığında, Visual Studio'da Masaüstü veya UWP uygulaması paketleme'yi izleyerek paketi oluşturacaksınız.
Dış konumdaki paketlemeyi geçerli yükleyiciyle uyumlu hale getirme
Uygulama paketi kimliğinizi vermenin ikinci yolu, uygulamanıza dış konuma sahip bir paket eklemek ve bunu mevcut yükleyicinize kaydetmektir. Dış konuma sahip paket, kimlik, hedef kaydı paylaşımı ve görsel varlıklar içeren .appxmanifest'i barındıran boş bir MSIX paketidir. Uygulamanın ikili dosyaları yine de uygulamanın mevcut yükleyicisi tarafından yönetilir. Paketi kaydederken api'de uygulamanın yükleme konumunu sağlamanız gerekir. Kimliği MSIX paket bildiriminde ve Win32 uygulama bildiriminde, uygulamayı imzalamak için kullanılan sertifikayla eşitlenmiş olarak tutmak önemlidir.
Paketlenmemiş bir uygulamaya paket kimliği verme adımları
Kullanılacak şablonlar hakkında bilgiler de dahil olmak üzere, dış konuma sahip bir paketin nasıl oluşturulacağıyla ilgili belgelere buradan ulaşabilirsiniz: Dış konumla paketle paket kimliği verme.
Tam örnek uygulama GitHub'da mevcuttur: Dış Konum ile Paketlenmiş.
Paylaşım Hedefi Olarak Kaydetme
Uygulama paket kimliğine sahip olduktan sonra, sonraki adım Paylaş sözleşmesini uygulamaktır. Paylaş sözleşmesi, uygulamanızın başka bir uygulamadan veri almasına olanak tanır.
Paketlenmiş uygulamaların Paylaşım Sayfası ile tümleştirilmesi için belgelerin Paylaşım Hedefi Olarak Kaydet bölümünde aynı adımları izleyebilirsiniz.
Örnek PhotoStore uygulamasının kılavuzu
Paketlenmemiş Win32 Uygulamaları için paket kimliği, kayıt ve paylaşım etkinleştirmesi ile ilgili bu kılavuzda, dış konuma sahip bir paket oluşturarak paketlenmemiş bir Win32 uygulamasına paket kimliği verme hakkında bilgi edineceksiniz. Uygulama paket kimliğine sahip olduktan sonra etkinleştirmeyi Paylaşım Hedefi olarak kaydedebilir ve işleyebilir. PhotoStoreDemo örneğini kullanarak aşağıdaki adımları uygulayacaksınız:
-
AppxManifest.xmlDosyayı oluşturma - Paket oluşturma
- Paketi imzalama
- Paketi kaydetme
- Uygulama etkinleştirmesini yönet
AppxManifest.xml dosyasını oluşturmakla başlayın, <AllowExternalContent> gibi gerekli özellikler, kimlik ve seçenekler ile paylaşım hedef uzantısını içeren bir dosya. Dosyadaki Publisher, PackageName ve ApplicationId değerlerinin AppxManifest.xml dosyadaki değerlerle eşleştiğinden PhotoStoreDemo.exe.manifest emin olun. Değerin Publisher , paketi imzalamak için kullanılan sertifikadaki değerle de eşleşmesi gerekir. Görsel öğeleri gerektiğinde ekleyin ve AppxManifest.xml ile referans verin. Visual Studio'da, gerekli görsel varlıkları oluşturmak için Uygulama Paketleme projesinde düzenleme package.manifest yaparken Görsel Varlıklar düğümünü kullanabilirsiniz.
Bu, dış içeriğe izin verilen örnek AppxManifest.xml bir kod parçacığıdır:
<Identity Name="PhotoStoreDemo" ProcessorArchitecture="neutral" Publisher="CN=YourPubNameHere" Version="1.0.0.0" />
<Properties>
<DisplayName>PhotoStoreDemo</DisplayName>
<PublisherDisplayName>Sparse Package</PublisherDisplayName>
<Logo>Assets\storelogo.png</Logo>
<uap10:AllowExternalContent>true</uap10:AllowExternalContent>
</Properties>
<Resources>
<Resource Language="en-us" />
</Resources>
<Dependencies>
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.19041.0" MaxVersionTested="10.0.19041.0" />
</Dependencies>
<Capabilities>
<rescap:Capability Name="runFullTrust" />
<rescap:Capability Name="unvirtualizedResources"/>
</Capabilities>
<Applications>
<Application Id="PhotoStoreDemo" Executable="PhotoStoreDemo.exe" uap10:TrustLevel="mediumIL" uap10:RuntimeBehavior="win32App">
<uap:VisualElements AppListEntry="none" DisplayName="PhotoStoreDemo" Description="PhotoStoreDemo" BackgroundColor="transparent" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square310x310Logo="Assets\LargeTile.png" Square71x71Logo="Assets\SmallTile.png"></uap:DefaultTile>
<uap:SplashScreen Image="Assets\SplashScreen.png" />
</uap:VisualElements>
<Extensions>
<uap:Extension Category="windows.shareTarget">
<uap:ShareTarget Description="Send to PhotoStoreDemo">
<uap:SupportedFileTypes>
<uap:FileType>.jpg</uap:FileType>
<uap:FileType>.png</uap:FileType>
<uap:FileType>.gif</uap:FileType>
</uap:SupportedFileTypes>
<uap:DataFormat>StorageItems</uap:DataFormat>
<uap:DataFormat>Bitmap</uap:DataFormat>
</uap:ShareTarget>
</uap:Extension>
...
Bu örnek bir Application.exe.manifest dosyasıdır:
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="PhotoStoreDemo.app"/>
<msix xmlns="urn:schemas-microsoft-com:msix.v1"
publisher="CN=YourPubNameHere"
packageName="PhotoStoreDemo"
applicationId="PhotoStoreDemo"
/>
</assembly>
Ardından, MakeAppx.exe aracını /nv komutuyla kullanarak AppxManifest.xml dosyasını içeren ve dış konumda bulunan bir paket oluşturun.
Örnek:
MakeAppx.exe pack /d <Path to directory with AppxManifest.xml> /p <Output Path>\mypackage.msix /nv
Uyarı
Dış konuma sahip bir paket bir paket bildirimi içerir, ancak başka uygulama ikili dosyaları ve içeriği içermez. Dış konuma sahip bir paketin bildirimi, önceden belirlenmiş bir dış konumda paketin dışındaki dosyalara başvurabilir.
kullanarak SignTool.exepaketinizi güvenilir bir sertifikayla imzalayın.
Örnek:
SignTool.exe sign /fd SHA256 /a /f <path to cert> /p <cert key> <Path to Package>
Paketi imzalamak için kullanılan sertifika, makinede güvenilir bir konuma yüklenmelidir.
Uygulamanın ilk çalıştırıldığında paketi Windows'a kaydedin. Bir uygulamanın kendi yükleyicisi olduğunda, yük olarak imzalı MSIX'i de içermesi ve bunu belirtilen bir konuma (örneğin, uygulamanın yükleme konumu) yerleştirmesi gerekir. Uygulamanın kaydetmek için MSIX'in mutlak yoluna ihtiyacı olacağı için bu konumun uygulama tarafından çalışma zamanında bilinmesi gerekir. Varlıkları ve resources.pri uygulamayı yükleme konumuna da yerleştirin.
Aşağıdaki kod, uygulamanın Main yönteminin paketlenmemiş yürütme örneğidir:
[STAThread]
public static void Main(string[] cmdArgs)
{
//if app isn't running with identity, register its package with external identity
if (!ExecutionMode.IsRunningWithIdentity())
{
//TODO - update the value of externalLocation to match the output location of your VS Build binaries and the value of
//externalPkgPath to match the path to your signed package with external identity (.msix).
//Note that these values cannot be relative paths and must be complete paths
string externalLocation = Environment.CurrentDirectory;
string externalPkgPath = externalLocation + @"\PhotoStoreDemo.package.msix";
//Attempt registration
bool bPackageRegistered = false;
//bPackageRegistered = registerPackageWithExternalLocation(externalLocation, externalPkgPath);
if (bPackageRegistered)
{
//Registration succeeded, restart the app to run with identity
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location, arguments: cmdArgs?.ToString());
}
else //Registration failed, run without identity
{
Debug.WriteLine("Package Registration failed, running WITHOUT Identity");
SingleInstanceManager wrapper = new SingleInstanceManager();
wrapper.Run(cmdArgs);
}
}
...
Bu örnek, uygulamanın ilk çalıştırmada MSIX'in nasıl kaydedileceğini göstermektedir.
[STAThread]
public static void Main(string[] cmdArgs)
{
//If app isn't running with identity, register its package with external identity
if (!ExecutionMode.IsRunningWithIdentity())
{
//TODO - update the value of externalLocation to match the output location of your VS Build binaries and the value of
//externalPkgPath to match the path to your signed package with external identity (.msix).
//Note that these values cannot be relative paths and must be complete paths
string externalLocation = Environment.CurrentDirectory;
string externalPkgPath = externalLocation + @"\PhotoStoreDemo.package.msix";
//Attempt registration
if (registerPackageWithExternalLocation(externalLocation, externalPkgPath))
{
//Registration succeeded, restart the app to run with identity
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location, arguments: cmdArgs?.ToString());
}
else //Registration failed, run without identity
{
Debug.WriteLine("Package Registration failed, running WITHOUT Identity");
SingleInstanceManager wrapper = new SingleInstanceManager();
wrapper.Run(cmdArgs);
}
}
...
Son olarak, uygulamanın etkinleştirilmesini işleyin.
[STAThread]
public static void Main(string[] cmdArgs)
{
//if app isn't running with identity, register its sparse package
if (!ExecutionMode.IsRunningWithIdentity())
{
...
}
else //App is registered and running with identity, handle launch and activation
{
//Handle Sparse Package based activation e.g Share target activation or clicking on a Tile
// Launching the .exe directly will have activationArgs == null
var activationArgs = AppInstance.GetActivatedEventArgs();
if (activationArgs != null)
{
switch (activationArgs.Kind)
{
case ActivationKind.Launch:
HandleLaunch(activationArgs as LaunchActivatedEventArgs);
break;
case ActivationKind.ToastNotification:
HandleToastNotification(activationArgs as ToastNotificationActivatedEventArgs);
break;
case ActivationKind.ShareTarget: // Handle the activation as a share target
HandleShareAsync(activationArgs as ShareTargetActivatedEventArgs);
break;
default:
HandleLaunch(null);
break;
}
}
//This is a direct exe based launch e.g. double click app .exe or desktop shortcut pointing to .exe
else
{
SingleInstanceManager singleInstanceManager = new SingleInstanceManager();
singleInstanceManager.Run(cmdArgs);
}
}
Paket kimliğiyle Windows Share tanıtımı
Aşağıdaki videoda paket kimliği verildikten ve paylaşım hedefi olarak kaydedildikten sonra paketlenmemiş bir uygulamanın nasıl paylaşım hedefi olabileceği gösterilmektedir:
Ayrıca bakınız
- Windows Uygulama SDK'sı dağıtımına genel bakış
- İlk WinUI 3 projenizi oluşturma
- UWP'den Windows Uygulama SDK'sına geçiş
- Uygulamayı paketlemenin Avantajları ve Dezavantajları - Dağıtıma genel bakış
- Paketlenmemiş Win32 Uygulamalarının Kimlik, Kayıt ve Etkinleştirme
- Windows Uygulama SDK'sı için Sözleşme Uygulamasını Paylaşma
- Dış Konumla Paketlenmiş Uygulamalar için Anlaşma Uygulamasını Paylaşma
Windows developer