Starta standardappen för en fil
Lär dig hur du startar standardappen för en fil från ditt WinUI, UWP (Universal Windows Platform) eller en annan skrivbordsapp. Många appar behöver arbeta med filer som de inte kan hantera själva. E-postappar får till exempel en mängd olika filtyper och behöver ett sätt att starta filerna i sina standardhanterare. De här stegen visar hur du använder API:et Windows.System.Launcher Windows Runtime (WinRT) för att starta standardhanteraren för en fil som appen inte kan hantera själv.
Viktiga API:er
Följande API:er finns i det här avsnittet:
Obs!
Om inget annat anges kan alla WinRT-API:er som används i det här avsnittet användas i både UWP-appar, WinUI-appar och andra skrivbordsappar. Mer information om hur du gör så att din skrivbordsapp fungerar med WinRT-API:er finns i Anropa Windows Runtime-API:er i skrivbordsappar.
Hämta filobjektet
Hämta först ett Windows.Storage.StorageFile- objekt för filen.
Om filen ingår i paketet för din app kan du använda egenskapen Package.InstalledLocation för att hämta en Windows.Storage.StorageFolder-objektet och Windows.Storage.StorageFolder.GetFileAsync-metoden för att hämta StorageFile--objektet.
Om filen finns i en känd mapp kan du använda egenskaperna för klassen Windows.Storage.KnownFolders för att hämta en StorageFolder- och metoden GetFileAsync för att hämta objektet StorageFile.
Starta filen
Windows innehåller flera olika alternativ för att starta standardhanteraren för en fil. De här alternativen beskrivs i det här diagrammet och i de avsnitt som följer.
Alternativ | Metod | Beskrivning |
---|---|---|
Förvald start | LaunchFileAsync(IStorageFile) | Starta den angivna filen med standardhanteraren. |
Öppna med start | LaunchFileAsync(IStorageFile, LauncherOptions) | Starta den angivna filen så att användaren kan välja hanteraren via dialogrutan Öppna med. |
Starta med en rekommenderad appåterställning | LaunchFileAsync(IStorageFile, LauncherOptions) | Starta den angivna filen med standardhanteraren. Om ingen hanterare är installerad på systemet rekommenderar du en app i butiken till användaren. |
Starta med en önskad återstående vy | LaunchFileAsync(IStorageFile, LauncherOptions) (endast Windows): | Starta den angivna filen med standardhanteraren. Ange en inställning för att stanna kvar på skärmen efter starten och begär en specifik fönsterstorlek. LauncherOptions.DesiredRemainingView stöds inte i den mobila enhetsfamiljen. |
Standardlansering
Anropa metoden Windows.System.Launcher.LaunchFileAsync(IStorageFile) för att starta standardappen. I det här exemplet används metoden Windows.Storage.StorageFolder.GetFileAsync för att starta en avbildningsfil, test.png, som ingår i apppaketet.
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
}
});
}
Öppna med start
Anropa metoden Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) med LauncherOptions.DisplayApplicationPicker inställd på true för att starta appen som användaren väljer från dialogrutan 'Öppna med'.
Vi rekommenderar att du använder dialogrutan Öppna med när användaren kanske vill välja en annan app än standardvärdet för en viss fil. Om din app till exempel tillåter att användaren startar en bildfil är standardhanteraren sannolikt en visningsapp. I vissa fall kanske användaren vill redigera bilden i stället för att visa den. Använd alternativet Öppna med tillsammans med ett alternativt kommando i AppBar- eller i en snabbmeny så att användaren kan öppna dialogrutan Öppna med och välja redigeringsappen i dessa typer av scenarier.
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
}
});
}
Starta med ett rekommenderat appalternativ
I vissa fall kanske användaren inte har någon app installerad för att hantera filen som du startar. Som standard hanterar Windows dessa fall genom att ge användaren en länk för att söka efter en lämplig app i butiken. Om du vill ge användaren en specifik rekommendation för vilken app som ska hämtas i det här scenariot kan du göra det genom att skicka rekommendationen tillsammans med filen som du startar. Det gör du genom att anropa metoden Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) med LauncherOptions.PreferredApplicationPackageFamilyName inställd på paketfamiljenamnet för appen i Store som du vill rekommendera. Ange sedan LauncherOptions.PreferredApplicationDisplayName till namnet på appen. Windows använder den här informationen för att ersätta det allmänna alternativet för att söka efter en app i butiken med ett specifikt alternativ för att hämta den rekommenderade appen från Store.
Not
Du måste ange båda dessa alternativ för att rekommendera en app. Om du ställer in en utan den andra resulterar det i ett fel.
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
}
});
}
Starta med önskad kvarvarande vy (endast UWP)
Källappar som anropar LaunchFileAsync kan begära att de ska vara kvar på skärmen efter en filstart. Som standard försöker Windows dela allt tillgängligt utrymme lika mellan källappen och målappen som hanterar filen. Källappar kan använda egenskapen DesiredRemainingView för att ange för operativsystemet att de föredrar att deras appfönster tar upp mer eller mindre av det tillgängliga utrymmet. DesiredRemainingView kan också användas för att indikera att källappen inte behöver vara kvar på skärmen efter filstarten och kan ersättas helt av målappen. Den här egenskapen anger endast den önskade fönsterstorleken för den anropande appen. Den anger inte beteendet för andra appar som kan hända att de också visas på skärmen samtidigt.
Notis
Windows tar hänsyn till flera olika faktorer när den avgör källappens slutliga fönsterstorlek, till exempel källappens inställningar, antalet appar på skärmen, skärmorienteringen och så vidare. Genom att ange DesiredRemainingViewär du inte garanterad något specifikt fönsterbeteende för källappen.
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
}
});
}
Anmärkningar
Appen kan inte välja den app som startas. Användaren avgör vilken app som startas. Användaren kan välja antingen en UWP-app eller en Windows-skrivbordsapp.
När du startar en fil måste din app vara förgrundsappen, dvs. den måste vara synlig för användaren. Det här kravet hjälper till att säkerställa att användaren förblir i kontroll. För att uppfylla detta krav måste du se till att du kopplar alla filer som startas direkt till appens användargränssnitt. Troligtvis måste användaren alltid vidta vissa åtgärder för att starta en fil.
Du kan inte starta filtyper som innehåller kod eller skript om de körs automatiskt av operativsystemet, till exempel .exe, .msioch .js filer. Den här begränsningen skyddar användare från potentiellt skadliga filer som kan ändra operativsystemet. Du kan använda den här metoden för att starta filtyper som kan innehålla skript om de körs av en app som isolerar skriptet, till exempel .docx filer. Appar som Microsoft Word behåller skriptet i .docx filer från att ändra operativsystemet.
Om du försöker starta ett begränsat filformat kommer starten att misslyckas och dess felåterkallelse att anropas. Om din app hanterar många olika typer av filer och du förväntar dig att du kommer att stöta på det här felet rekommenderar vi att du tillhandahåller en återställningsupplevelse till din användare. Du kan till exempel ge användaren ett alternativ för att spara filen på skrivbordet och de kan öppna den där.
Relaterat innehåll
Windows developer