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.
WinUI'nizden veya başka bir masaüstü uygulamanızdan bir dosya için varsayılan uygulamayı başlatmayı öğrenin. Birçok uygulamanın, işleyemedikleri dosyalarla çalışması gerekir. Örneğin, e-posta uygulamaları çeşitli dosya türlerini alır ve bu dosyaları varsayılan işleyicilerinde başlatmak için bir yönteme ihtiyaç duyar. Bu adımlar, uygulamanızın kendisi işleyemediği bir dosya için varsayılan işleyiciyi başlatmak üzere Windows.System.Launcher Windows Çalışma Zamanı (WinRT) API'sinin nasıl kullanılacağını gösterir.
Önemli API'ler
Bu konuda aşağıdaki API'ler yer aldı:
Uyarı
Aksi belirtilmediği sürece, bu konuda kullanılan tüm WinRT API'leri hem WinUI uygulamalarında hem de diğer masaüstü uygulamalarında kullanılabilir. Masaüstü uygulamanızın WinRT API'leriyle çalışmasını sağlama hakkında daha fazla bilgi için bkz. Masaüstü uygulamalarında Windows Çalışma Zamanı API'lerini çağırma.
Dosya nesnesini alma
İlk olarak, dosya için bir Windows.Storage.StorageFile nesnesi alın.
Dosya uygulamanızın paketine eklenmişse, Bir Windows.Storage.StorageFolder nesnesi almak için Package.InstalledLocation özelliğini ve StorageFile nesnesini almak için Windows.Storage.StorageFolder.GetFileAsync yöntemini kullanabilirsiniz.
Dosya bilinen bir klasördeyse, StorageFolder almak için Windows.Storage.KnownFolders sınıfının özelliklerini ve StorageFile nesnesini almak için GetFileAsync yöntemini kullanabilirsiniz.
Dosyayı başlatma
Windows, bir dosya için varsayılan işleyiciyi başlatmak için çeşitli seçenekler sağlar. Bu seçenekler bu grafikte ve izleyen bölümlerde açıklanmıştır.
| Seçenek | Yöntem | Açıklama |
|---|---|---|
| Varsayılan başlatma | LaunchFileAsync(IStorageFile) | Belirtilen dosyayı varsayılan işleyiciyle başlatın. |
| Başlatma ile aç | LaunchFileAsync(IStorageFile, LauncherOptions) | Kullanıcının birlikte aç iletişim kutusu aracılığıyla işleyiciyi seçmesine izin vermek için belirtilen dosyayı başlatın. |
| Önerilen bir yedek uygulama ile başlat | LaunchFileAsync(IStorageFile, LauncherOptions) | Belirtilen dosyayı varsayılan işleyiciyle başlatın. Sistemde hiçbir işleyici yüklü değilse, kullanıcıya mağazada bir uygulama önerin. |
| İstenen kalan görünümle başlat | LaunchFileAsync(IStorageFile, LauncherOptions) (Yalnızca Windows) | Belirtilen dosyayı varsayılan işleyiciyle başlatın. Başlatmadan sonra ekranda kalmak için bir tercih belirtin ve belirli bir pencere boyutu isteyin. LauncherOptions.DesiredRemainingView mobil cihaz ailesinde desteklenmez. |
Varsayılan başlatma
Varsayılan uygulamayı başlatmak için Windows.System.Launcher.LaunchFileAsync(IStorageFile) yöntemini çağırın. Bu örnekte, uygulama paketinde yer alan test.pngbir görüntü dosyası başlatmak için Windows.Storage.StorageFolder.GetFileAsync yöntemi kullanılır.
async void DefaultLaunch()
{
// Path to the file in the app package to launch
string imageFile = @"images\test.png";
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(imageFile);
if (file != null)
{
// Launch the retrieved file
var success = await Windows.System.Launcher.LaunchFileAsync(file);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
else
{
// Could not find file
}
}
Windows::Foundation::IAsyncAction MainPage::DefaultLaunch()
{
auto installFolder{ Windows::ApplicationModel::Package::Current().InstalledLocation() };
Windows::Storage::StorageFile file{ co_await installFolder.GetFileAsync(L"images\\test.png") };
if (file)
{
// Launch the retrieved file
bool success = co_await Windows::System::Launcher::LaunchFileAsync(file);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
else
{
// Could not find file
}
}
void MainPage::DefaultLaunch()
{
auto installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;
concurrency::task<Windows::Storage::StorageFile^> getFileOperation(installFolder->GetFileAsync("images\\test.png"));
getFileOperation.then([](Windows::Storage::StorageFile^ file)
{
if (file != nullptr)
{
// Launch the retrieved file
concurrency::task<bool> launchFileOperation(Windows::System::Launcher::LaunchFileAsync(file));
launchFileOperation.then([](bool success)
{
if (success)
{
// File launched
}
else
{
// File launch failed
}
});
}
else
{
// Could not find file
}
});
}
Başlatma ile aç
Kullanıcının Birlikte Aç iletişim kutusundan seçtiği uygulamayı başlatmak için LauncherOptions.DisplayApplicationPicker değeri true olarak ayarlanmış Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) yöntemini çağırın.
Kullanıcı belirli bir dosya için varsayılandan farklı bir uygulama seçmek istediğinde Birlikte Aç iletişim kutusunu kullanmanızı öneririz. Örneğin, uygulamanız kullanıcının görüntü dosyasını başlatmasına izin veriyorsa varsayılan işleyici büyük olasılıkla bir görüntüleyici uygulaması olacaktır. Bazı durumlarda, kullanıcı görüntüyü görüntülemek yerine düzenlemek isteyebilir. Kullanıcının Birlikte Aç iletişim kutusunu açmasına ve bu tür senaryolarda düzenleyici uygulamasını seçmesine izin vermek için AppBar'daki veya bağlam menüsündeki alternatif bir komutla birlikte Birlikte Aç seçeneğini kullanın.
async void DefaultLaunch()
{
// Path to the file in the app package to launch
string imageFile = @"images\test.png";
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(imageFile);
if (file != null)
{
// Set the option to show the picker
var options = new Windows.System.LauncherOptions();
options.DisplayApplicationPicker = true;
// Launch the retrieved file
bool success = await Windows.System.Launcher.LaunchFileAsync(file, options);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
else
{
// Could not find file
}
}
Windows::Foundation::IAsyncAction MainPage::DefaultLaunch()
{
auto installFolder{ Windows::ApplicationModel::Package::Current().InstalledLocation() };
Windows::Storage::StorageFile file{ co_await installFolder.GetFileAsync(L"images\\test.png") };
if (file)
{
// Set the option to show the picker
Windows::System::LauncherOptions launchOptions;
launchOptions.DisplayApplicationPicker(true);
// Launch the retrieved file
bool success = co_await Windows::System::Launcher::LaunchFileAsync(file, launchOptions);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
else
{
// Could not find file
}
}
void MainPage::DefaultLaunch()
{
auto installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;
concurrency::task<Windows::Storage::StorageFile^> getFileOperation(installFolder->GetFileAsync("images\\test.png"));
getFileOperation.then([](Windows::Storage::StorageFile^ file)
{
if (file != nullptr)
{
// Set the option to show the picker
auto launchOptions = ref new Windows::System::LauncherOptions();
launchOptions->DisplayApplicationPicker = true;
// Launch the retrieved file
concurrency::task<bool> launchFileOperation(Windows::System::Launcher::LaunchFileAsync(file, launchOptions));
launchFileOperation.then([](bool success)
{
if (success)
{
// File launched
}
else
{
// File launch failed
}
});
}
else
{
// Could not find file
}
});
}
Önerilen bir uygulama alternatifiyle başlatma
Bazı durumlarda, kullanıcının başlattığınız dosyayı işlemek için yüklü bir uygulaması olmayabilir. Varsayılan olarak, Windows kullanıcıya mağazada uygun bir uygulamayı araması için bir bağlantı sağlayarak bu durumları işler. Kullanıcıya bu senaryoda hangi uygulamayı edineceği konusunda belirli bir öneri vermek isterseniz, bu öneriyi başlatmakta olduğunuz dosyayla birlikte ileterek bunu yapabilirsiniz. Bunu yapmak için LauncherOptions.PreferredApplicationPackageFamilyName ile Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) yöntemini Store'da önerilen uygulamanın paket ailesi adı olarak ayarlayın. Ardından LauncherOptions.PreferredApplicationDisplayName değerini bu uygulamanın adına ayarlayın. Windows, mağazadaki bir uygulamayı aramanın genel seçeneğini, önerilen uygulamayı Mağaza'dan almak için belirli bir seçenekle değiştirmek için bu bilgileri kullanır.
Uyarı
Bir uygulama önermek için bu seçeneklerin her ikisini de ayarlamanız gerekir. Birini diğerinin olmadan ayarlamak hataya neden olur.
async void DefaultLaunch()
{
// Path to the file in the app package to launch
string imageFile = @"images\test.contoso";
// Get the image file from the package's image directory
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(imageFile);
if (file != null)
{
// Set the recommended app
var options = new Windows.System.LauncherOptions();
options.PreferredApplicationPackageFamilyName = "Contoso.FileApp_8wknc82po1e";
options.PreferredApplicationDisplayName = "Contoso File App";
// Launch the retrieved file pass in the recommended app
// in case the user has no apps installed to handle the file
bool success = await Windows.System.Launcher.LaunchFileAsync(file, options);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
else
{
// Could not find file
}
}
Windows::Foundation::IAsyncAction MainPage::DefaultLaunch()
{
auto installFolder{ Windows::ApplicationModel::Package::Current().InstalledLocation() };
Windows::Storage::StorageFile file{ co_await installFolder.GetFileAsync(L"images\\test.png") };
if (file)
{
// Set the recommended app
Windows::System::LauncherOptions launchOptions;
launchOptions.PreferredApplicationPackageFamilyName(L"Contoso.FileApp_8wknc82po1e");
launchOptions.PreferredApplicationDisplayName(L"Contoso File App");
// Launch the retrieved file, and pass in the recommended app
// in case the user has no apps installed to handle the file.
bool success = co_await Windows::System::Launcher::LaunchFileAsync(file, launchOptions);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
else
{
// Could not find file
}
}
void MainPage::DefaultLaunch()
{
auto installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;
concurrency::task<Windows::Storage::StorageFile^> getFileOperation(installFolder->GetFileAsync("images\\test.contoso"));
getFileOperation.then([](Windows::Storage::StorageFile^ file)
{
if (file != nullptr)
{
// Set the recommended app
auto launchOptions = ref new Windows::System::LauncherOptions();
launchOptions->PreferredApplicationPackageFamilyName = "Contoso.FileApp_8wknc82po1e";
launchOptions->PreferredApplicationDisplayName = "Contoso File App";
// Launch the retrieved file pass, and in the recommended app
// in case the user has no apps installed to handle the file.
concurrency::task<bool> launchFileOperation(Windows::System::Launcher::LaunchFileAsync(file, launchOptions));
launchFileOperation.then([](bool success)
{
if (success)
{
// File launched
}
else
{
// File launch failed
}
});
}
else
{
// Could not find file
}
});
}
İstenen Kalan Görünümle Başlat (yalnızca UWP)
LaunchFileAsync'i çağıran kaynak uygulamalar, bir dosya başlatıldıktan sonra ekranda kalmalarını isteyebilir. Varsayılan olarak, Windows kullanılabilir tüm alanı kaynak uygulama ile dosyayı işleyen hedef uygulama arasında eşit olarak paylaşmaya çalışır. Kaynak uygulamalar, işletim sistemine uygulama pencerelerinin kullanılabilir alandan daha fazla veya daha az yer kaplamasını tercih ettiklerini belirtmek için DesiredRemainingView özelliğini kullanabilir. DesiredRemainingView , kaynak uygulamanın dosya başlatıldıktan sonra ekranda kalması gerekmediğini ve hedef uygulama tarafından tamamen değiştirilebileceğini belirtmek için de kullanılabilir. Bu özellik yalnızca çağrı uygulamasının tercih edilen pencere boyutunu belirtir. Aynı anda ekranda olabilecek diğer uygulamaların davranışını belirtmez.
Uyarı
Windows, kaynak uygulamanın son pencere boyutunu belirlerken, örneğin kaynak uygulamanın tercihini, ekrandaki uygulama sayısını, ekran yönünü vb. birden çok farklı faktörü dikkate alır. desiredRemainingView veayarlayarak, kaynak uygulama için belirli bir pencereleme davranışı garanti edilmez.
async void DefaultLaunch()
{
// Path to the file in the app package to launch
string imageFile = @"images\test.png";
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(imageFile);
if (file != null)
{
// Set the desired remaining view
var options = new Windows.System.LauncherOptions();
options.DesiredRemainingView = Windows.UI.ViewManagement.ViewSizePreference.UseLess;
// Launch the retrieved file
bool success = await Windows.System.Launcher.LaunchFileAsync(file, options);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
else
{
// Could not find file
}
}
Windows::Foundation::IAsyncAction MainPage::DefaultLaunch()
{
auto installFolder{ Windows::ApplicationModel::Package::Current().InstalledLocation() };
Windows::Storage::StorageFile file{ co_await installFolder.GetFileAsync(L"images\\test.png") };
if (file)
{
// Set the desired remaining view.
Windows::System::LauncherOptions launchOptions;
launchOptions.DesiredRemainingView(Windows::UI::ViewManagement::ViewSizePreference::UseLess);
// Launch the retrieved file.
bool success = co_await Windows::System::Launcher::LaunchFileAsync(file, launchOptions);
if (success)
{
// File launched
}
else
{
// File launch failed
}
}
else
{
// Could not find file
}
}
void MainPage::DefaultLaunch()
{
auto installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;
concurrency::task<Windows::Storage::StorageFile^> getFileOperation(installFolder->GetFileAsync("images\\test.png"));
getFileOperation.then([](Windows::Storage::StorageFile^ file)
{
if (file != nullptr)
{
// Set the desired remaining view.
auto launchOptions = ref new Windows::System::LauncherOptions();
launchOptions->DesiredRemainingView = Windows::UI::ViewManagement::ViewSizePreference::UseLess;
// Launch the retrieved file.
concurrency::task<bool> launchFileOperation(Windows::System::Launcher::LaunchFileAsync(file, launchOptions));
launchFileOperation.then([](bool success)
{
if (success)
{
// File launched
}
else
{
// File launch failed
}
});
}
else
{
// Could not find file
}
});
}
Açıklamalar
Uygulamanız başlatılan uygulamayı seçemiyor. Hangi uygulamanın başlatıldığını kullanıcı belirler. Kullanıcı bir WinUI uygulaması veya Windows masaüstü uygulaması seçebilir.
Bir dosyayı başlatırken uygulamanızın ön plan uygulaması olması, yani kullanıcının görebilmesi gerekir. Bu gereksinim, kullanıcının denetimde kalmasını sağlamaya yardımcı olur. Bu gereksinimi karşılamak için tüm dosya başlatmalarını doğrudan uygulamanızın kullanıcı arabirimine bağladığınızdan emin olun. Büyük olasılıkla, kullanıcının her zaman bir dosya başlatma işlemi başlatmak için bazı eylemler gerçekleştirmesi gerekir.
.exe, .msive .js dosyaları gibi işletim sistemi tarafından otomatik olarak yürütülürlerse kod veya betik içeren dosya türlerini başlatamazsınız. Bu kısıtlama, kullanıcıları işletim sistemini değiştirebilecek kötü amaçlı olabilecek dosyalardan korur. Bu yöntemi, .docx dosyaları gibi betiği izole eden bir uygulama tarafından çalıştırıldıklarında betik içerebilecek dosya türlerini başlatmak için kullanabilirsiniz. Microsoft Word gibi uygulamalar, .docx dosyalarındaki betiklerin işletim sistemini değiştirmesini önler.
Kısıtlanmış bir dosya türünü çalıştırmaya çalışırsanız, çalıştırma başarısız olur ve hata geri çağırma işleviniz çalıştırılır. Uygulamanız birçok farklı dosya türünü işliyorsa ve bu hataya ulaşmanızı bekliyorsanız, kullanıcınıza bir geri dönüş deneyimi sağlamanızı öneririz. Örneğin, kullanıcıya dosyayı masaüstüne kaydetme seçeneği verebilirsiniz ve orada açabilirler.
İlgili içerik
Windows developer