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.
Protokol etkinleştirme ( derin bağlama veya URI etkinleştirme olarak da adlandırılır), başka bir uygulamanın, tarayıcının veya komut satırının gibi myapp://action?param=valuebir URI'ye giderek uygulamanızı başlatmasına olanak tanır.
Bu makalede, özellikle bir WPF uygulamasına yönelik kod gösterilmektedir. Tam yönergeler için ana URI işleme etkinleştirme makalesine bakın. Windows Uygulama SDK'sı ile zengin etkinleştirme hakkında ayrıntılı bilgi için bkz. Uygulama yaşam döngüsü API'si ile zengin etkinleştirme.
Protokol etkinleştirme için kaydolma
Protokol etkinleştirmeyi işlemek için uygulamanızı kaydetmeniz gerekir. Paketlenmemiş bir uygulama için koda kaydolabilirsiniz. Paketlenmiş bir uygulama için uygulama bildirimine kaydolabilirsiniz.
Paketlenmemiş uygulama
Paketlenmemiş bir .NET uygulaması için (varsayılan WPF/WinForms kurulumu), ActivationRegistrationManager kullanarak başlangıçta protokolünüzü kaydedin. Kayıtlar kullanıcı başınadır ve kalıcıdır, bu nedenle her başlatmada bunu çağırmak güvenlidir.
içinde App.xaml.cs, geçersiz kıl OnStartup:
using Microsoft.Windows.AppLifecycle;
protected override void OnStartup(StartupEventArgs e)
{
// Register the URI scheme "myapp://" for this app.
// For the logo, pass the exe path + resource index (or "" to use the default icon).
string exePath = System.Diagnostics.Process.GetCurrentProcess().MainModule?.FileName ?? "";
string logo = string.IsNullOrEmpty(exePath) ? "" : exePath + ",0";
ActivationRegistrationManager.RegisterForProtocolActivation(
"myapp", // URI scheme (no "://")
logo, // logo: exe path + resource index, or "" for default icon
"My App", // display name for the protocol
exePath); // path of this EXE; pass "" to default to the current process
base.OnStartup(e);
}
Kaydı temizlemek için (örneğin, bir kaldırma adımında) ActivationRegistrationManager.UnregisterForProtocolActivation("myapp", "") fonksiyonunu çağırın.
Paketlenmiş uygulama
Paketlenmiş bir .NET uygulaması için, Package.appxmanifest<Applications><Application> öğesi altında protokolü bildirin:
<Applications>
<Application ...>
<Extensions>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="myapp">
<uap:DisplayName>My App</uap:DisplayName>
</uap:Protocol>
</uap:Extension>
</Extensions>
</Application>
</Applications>
uap XML ad alanının Package öğesi üzerinde bildirildiğinden emin olun: xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10".
Etkinleştirme işlemini gerçekleştir
AppInstance.GetCurrent().GetActivatedEventArgs() yöntemini kullanarak etkinleştirme bağımsız değişkenlerini alın. Aşağıdaki örnek, başlangıçta RegisterForProtocolActivation çağıran paketlenmemiş bir WPF uygulamasının kodunu içerir. Paketlenmiş uygulamalar manifest kaydı aracılığıyla etkinleştirme alır, bu yüzden RegisterForProtocolActivation çağrısını atlayabilirler.
using Microsoft.Windows.AppLifecycle;
using Windows.ApplicationModel.Activation;
protected override void OnStartup(StartupEventArgs e)
{
// Unpackaged apps only: register the protocol at startup.
// Packaged apps (MSIX): skip these lines — the manifest handles registration.
string exePath = System.Diagnostics.Process.GetCurrentProcess().MainModule?.FileName ?? "";
string logo = string.IsNullOrEmpty(exePath) ? "" : exePath + ",0";
ActivationRegistrationManager.RegisterForProtocolActivation(
"myapp", logo, "My App", exePath);
// Get the activation args for this specific launch.
AppActivationArguments args = AppInstance.GetCurrent().GetActivatedEventArgs();
if (args?.Kind == ExtendedActivationKind.Protocol)
{
var protocolArgs = (ProtocolActivatedEventArgs)args.Data;
HandleProtocolActivation(protocolArgs.Uri);
}
base.OnStartup(e);
}
private void HandleProtocolActivation(Uri uri)
{
// Navigate to or open content based on uri.AbsolutePath or uri.Query.
}
Note
WPF ve Windows Forms uygulamaları URI etkinleştirme verilerini almak için AppInstance.GetCurrent().GetActivatedEventArgs() çağrısını zorunlu olarak yapmalıdır. C++ Win32 uygulamalarından farklı olarak, .NET uygulamaları başlangıç giriş noktası parametresi aracılığıyla etkinleştirme argümanları almaz.
Tek örnekli yeniden yönlendirmeyi işleme
Uygulamanız aynı anda yalnızca bir örnek çalıştıracaksa, sonraki URI başlatmalarını çalışan örneğe yeniden yönlendirmek için kullanın AppInstance.FindOrRegisterForKey :
protected override void OnStartup(StartupEventArgs e)
{
string exePath = System.Diagnostics.Process.GetCurrentProcess().MainModule?.FileName ?? "";
string logo = string.IsNullOrEmpty(exePath) ? "" : exePath + ",0";
ActivationRegistrationManager.RegisterForProtocolActivation(
"myapp", logo, "My App", exePath);
// Try to claim the "main" key. If another instance already has it, redirect and exit.
AppInstance currentInstance = AppInstance.FindOrRegisterForKey("main");
if (!currentInstance.IsCurrent)
{
var activationArgs = AppInstance.GetCurrent().GetActivatedEventArgs();
// Run the async redirect on a thread-pool thread to avoid a potential deadlock
// with the WPF SynchronizationContext. Signal completion via an event so that
// this code path exits cleanly without re-entering the STA message pump.
var redirectCompleted = new System.Threading.ManualResetEventSlim(false);
System.Threading.Tasks.Task.Run(async () =>
{
await currentInstance.RedirectActivationToAsync(activationArgs);
redirectCompleted.Set();
});
redirectCompleted.Wait();
Shutdown();
return;
}
// This is the first instance. Subscribe to future activations.
currentInstance.Activated += OnActivated;
base.OnStartup(e);
}
private void OnActivated(object sender, AppActivationArguments args)
{
Dispatcher.Invoke(() =>
{
if (args.Kind == ExtendedActivationKind.Protocol)
{
var protocolArgs = (ProtocolActivatedEventArgs)args.Data;
HandleProtocolActivation(protocolArgs.Uri);
}
MainWindow?.Activate();
});
}
Uygulama kullanımı hakkında daha fazla bilgi için bkz. Uygulama yaşam döngüsü API'siyle uygulama kullanımı.
İlgili içerik
Windows developer