De standaard-app voor een bestand starten
Meer informatie over het starten van de standaard-app voor een bestand vanuit uw WinUI, Universal Windows Platform (UWP) of een andere bureaublad-app. Veel apps moeten werken met bestanden die ze niet zelf kunnen verwerken. E-mail-apps ontvangen bijvoorbeeld verschillende bestandstypen en hebben een manier nodig om deze bestanden in hun standaardhandlers te starten. Deze stappen laten zien hoe u de Windows.System.Launcher WinRT-API (Windows Runtime) gebruikt om de standaardhandler te starten voor een bestand dat uw app niet zelf kan verwerken.
Belangrijke API's
De volgende API's worden in dit onderwerp weergegeven:
Notitie
Tenzij anders vermeld, kunnen alle WinRT-API's die in dit onderwerp worden gebruikt, worden gebruikt in zowel UWP-apps, WinUI-apps als andere bureaublad-apps. Zie Windows Runtime-API's aanroepen in desktop-appsvoor meer informatie over het inschakelen van uw bureaublad-app om te werken met WinRT-API's.
Het bestandsobject ophalen
Haal eerst een Windows.Storage.StorageFile--object voor het bestand op.
Als het bestand is opgenomen in het pakket voor uw app, kunt u de eigenschap Package.InstalledLocation gebruiken om een Windows.Storage.StorageFolder-object te krijgen en de methode Windows.Storage.StorageFolder.GetFileAsync te gebruiken om het StorageFile-object op te halen.
Als het bestand zich in een bekende map bevindt, kunt u de eigenschappen van de klasse Windows.Storage.KnownFolders gebruiken om een StorageFolder- op te halen en de methode GetFileAsync om het StorageFile-object op te halen.
Het bestand starten
Windows biedt verschillende opties voor het starten van de standaardhandler voor een bestand. Deze opties worden beschreven in deze grafiek en in de volgende secties.
Optie | Methode | Beschrijving |
---|---|---|
Standaard opstarten | LaunchFileAsync(IStorageFile) | Start het opgegeven bestand met de standaardhandler. |
Openen met starten | LaunchFileAsync(IStorageFile, LauncherOptions) | Start het opgegeven bestand zodat de gebruiker de handler kan kiezen via het dialoogvenster Openen met. |
Starten met een aanbevolen alternatieve app | LaunchFileAsync(IStorageFile, LauncherOptions) | Start het opgegeven bestand met de standaardhandler. Als er geen handler op het systeem is geïnstalleerd, raadt u een app in de Store aan voor de gebruiker. |
Starten met een gewenste overblijvende weergave | LaunchFileAsync(IStorageFile, LauncherOptions) (alleen Windows) | Start het opgegeven bestand met de standaardhandler. Geef een voorkeur op om op het scherm te blijven na het starten en een specifieke venstergrootte aan te vragen. LauncherOptions.DesiredRemainingView wordt niet ondersteund in de familie van mobiele apparaten. |
Standaard lancering
Roep de Windows.System.Launcher.LaunchFileAsync(IStorageFile) aan methode om de standaard-app te starten. In dit voorbeeld wordt de methode Windows.Storage.StorageFolder.GetFileAsync gebruikt om een afbeeldingsbestand, test.png, te starten dat is opgenomen in het app-pakket.
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
}
});
}
Openen met starten
Roep de methode Windows.System.LaunchFileAsync(IStorageFile, LauncherOptions) methode aan met LauncherOptions.DisplayApplicationPicker ingesteld op true om de app te starten die de gebruiker selecteert in het dialoogvenster Openen met.
U wordt aangeraden het dialoogvenster Openen met te gebruiken wanneer de gebruiker mogelijk een andere app dan de standaardinstelling voor een bepaald bestand wilt selecteren. Als uw app bijvoorbeeld toestaat dat de gebruiker een afbeeldingsbestand start, is de standaardhandler waarschijnlijk een viewer-app. In sommige gevallen wil de gebruiker de afbeelding mogelijk bewerken in plaats van deze te bekijken. Gebruik de optie Openen met samen met een alternatieve opdracht in de AppBar of in een contextmenu om de gebruiker het dialoogvenster Openen met te laten openen en de editor-app in deze scenario's te selecteren.
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
}
});
}
Start met een aanbevolen alternatieve app
In sommige gevallen is er mogelijk geen app geïnstalleerd om het bestand te verwerken dat u start. In Windows worden deze gevallen standaard afgehandeld door de gebruiker een koppeling te geven om te zoeken naar een geschikte app in de Store. Als u de gebruiker een specifieke aanbeveling wilt geven voor welke app in dit scenario moet worden verkregen, kunt u dit doen door die aanbeveling door te geven samen met het bestand dat u start. Hiervoor roept u de methode Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) methode aan met LauncherOptions.PreferredApplicationPackageFamilyName ingesteld op de pakketfamilienaam van de app in de Store die u wilt aanbevelen. Stel vervolgens de LauncherOptions.PreferredApplicationDisplayName in op de naam van die app. Windows gebruikt deze informatie om de algemene optie te vervangen om te zoeken naar een app in de Store met een specifieke optie om de aanbevolen app in de Store te verkrijgen.
Notitie
U moet beide opties instellen om een app aan te bevelen. Als u een instelling zonder de andere instelt, treedt er een fout op.
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
}
});
}
Starten met een gewenste resterende weergave (uitsluitend UWP)
Bron-apps die LaunchFileAsync- aanroepen, kunnen aanvragen dat ze op het scherm blijven na het starten van het bestand. Windows probeert standaard alle beschikbare ruimte gelijk te delen tussen de bron-app en de doel-app die het bestand verwerkt. Bron-apps kunnen de eigenschap DesiredRemainingView gebruiken om aan te geven aan het besturingssysteem dat ze liever hun app-venster gebruiken om meer of minder van de beschikbare ruimte in beslag te nemen. DesiredRemainingView kan ook worden gebruikt om aan te geven dat de bron-app niet op het scherm hoeft te blijven na het starten van het bestand en volledig kan worden vervangen door de doel-app. Met deze eigenschap geeft u alleen de gewenste venstergrootte van de aanroepende app op. Het geeft niet het gedrag op van andere apps die mogelijk ook tegelijkertijd op het scherm staan.
Notitie
Windows houdt rekening met meerdere verschillende factoren wanneer de uiteindelijke venstergrootte van de bron-app wordt bepaald, bijvoorbeeld de voorkeur van de bron-app, het aantal apps op het scherm, de schermstand, enzovoort. Door DesiredRemainingView in te stellenis er geen garantie op een specifiek venstergedrag voor de bron-app.
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
}
});
}
Opmerkingen
Uw app kan de app die wordt gestart niet selecteren. De gebruiker bepaalt welke app wordt gestart. De gebruiker kan een UWP-app of een Windows-bureaublad-app selecteren.
Wanneer u een bestand start, moet uw app de voorgrond-app zijn, dat wil gezegd, het moet zichtbaar zijn voor de gebruiker. Deze vereiste helpt ervoor te zorgen dat de gebruiker de controle blijft houden. Als u aan deze vereiste wilt voldoen, moet u ervoor zorgen dat u alle bestanden rechtstreeks koppelt aan de gebruikersinterface van uw app. Waarschijnlijk moet de gebruiker altijd actie ondernemen om een bestand te starten.
U kunt bestandstypen die code of script bevatten niet starten als ze automatisch worden uitgevoerd door het besturingssysteem, zoals .exe, .msien .js bestanden. Deze beperking beveiligt gebruikers tegen mogelijk schadelijke bestanden die het besturingssysteem kunnen wijzigen. U kunt deze methode gebruiken om bestandstypen te starten die script kunnen bevatten als ze worden uitgevoerd door een app waarmee het script wordt geïsoleerd, zoals .docx bestanden. Apps zoals Microsoft Word voorkomen dat het script in .docx-bestanden het besturingssysteem wijzigt.
Als u probeert een beperkt bestandstype te starten, mislukt de start en wordt uw foutaanroep aangeroepen. Als uw app veel verschillende typen bestanden verwerkt en u verwacht dat u deze fout krijgt, raden we u aan om uw gebruiker een terugvalervaring te bieden. U kunt de gebruiker bijvoorbeeld een optie geven om het bestand op het bureaublad op te slaan en het daar te openen.
Verwante inhoud
Windows developer