Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zjistěte, jak spustit výchozí aplikaci pro soubor z WinUI nebo jiné desktopové aplikace. Mnoho aplikací musí pracovat se soubory, které samy o sobě nezvládnou. Například e-mailové aplikace přijímají různé typy souborů a potřebují způsob, jak tyto soubory spustit ve svých výchozích obslužných rutinách. Tyto kroky ukazují, jak pomocí rozhraní WINDOWS.System.Launcher Windows Runtime (WinRT) spustit výchozí obslužnou rutinu souboru, který aplikace nedokáže zpracovat.
Důležitá rozhraní API
V tomto tématu jsou uvedená následující rozhraní API:
Poznámka:
Pokud není uvedeno jinak, všechna rozhraní API WinRT použitá v tomto tématu se dají použít v aplikacích WinUI i v jiných desktopových aplikacích. Další informace o povolení desktopové aplikace pro práci s rozhraními API WinRT najdete v tématu Volání rozhraní API Windows Runtime v desktopových aplikacích.
Získejte objekt souboru
Nejprve získejte objekt Windows.Storage.StorageFile pro soubor.
Pokud je soubor součástí balíčku pro vaši aplikaci, můžete použít vlastnost Package.InstalledLocation k získání objektu Windows.Storage.StorageFolder a metodu Windows.Storage.StorageFolder.GetFileAsync k získání objektu StorageFile.
Pokud je soubor ve známé složce, můžete použít vlastnosti třídy Windows.Storage.KnownFolders k získání StorageFolder a metodu GetFileAsync k získání objektu StorageFile.
Spuštění souboru
Systém Windows nabízí několik různých možností pro spuštění výchozí obslužné rutiny souboru. Tyto možnosti jsou popsány v tomto grafu a v následujících částech.
| Možnost | Metoda | Description |
|---|---|---|
| Výchozí spuštění | LaunchFileAsync(IStorageFile) | Spusťte zadaný soubor s výchozí obslužnou rutinou. |
| Spuštění pomocí | LaunchFileAsync(IStorageFile, LauncherOptions) | Spusťte zadaný soubor, který uživateli umožní vybrat obslužnou rutinu v dialogovém okně Otevřít v aplikaci. |
| Spusťte s doporučenou záložní aplikací. | LaunchFileAsync(IStorageFile, LauncherOptions) | Spusťte zadaný soubor s výchozí obslužnou rutinou. Pokud v systému není nainstalovaná žádná obslužná rutina, doporučte uživateli aplikaci v obchodě. |
| Spuštění s požadovaným zbývajícím zobrazením | LaunchFileAsync(IStorageFile, LauncherOptions) (jenom Windows) | Spusťte zadaný soubor s výchozí obslužnou rutinou. Zadejte předvolbu pro pobyt na obrazovce po spuštění a požádejte o konkrétní velikost okna. LauncherOptions.DesiredRemainingView není podporován v rodině mobilních zařízení. |
Výchozí spuštění
Voláním metody Windows.System.Launcher.LaunchFileAsync(IStorageFile) spusťte výchozí aplikaci. Tento příklad používá metodu Windows.Storage.StorageFolder.GetFileAsync ke spuštění souboru obrázku test.png, který je součástí balíčku aplikace.
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
}
});
}
Otevřít s spuštění
Zavolejte metodu Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) s nastavením LauncherOptions.DisplayApplicationPicker na true, aby se aplikace vybraná uživatelem spustila z dialogového okna Otevřít pomocí.
Doporučujeme použít dialogové okno Otevřít v aplikaci, když uživatel může chtít vybrat jinou aplikaci než výchozí pro konkrétní soubor. Pokud například vaše aplikace umožňuje uživateli spustit soubor obrázku, bude výchozí obslužná rutina pravděpodobně aplikací prohlížeče. V některých případech může chtít uživatel obrázek upravit místo toho, aby si jej prohlížel. Pomocí možnosti Otevřít v aplikaci spolu s alternativním příkazem v AppBaru nebo v místní nabídce umožníte uživateli zobrazit dialogové okno Otevřít v aplikaci a vybrat aplikaci editoru v těchto typech scé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
}
});
}
Spuštění s využitím doporučené aplikace pro případný záložní scénář
V některých případech uživatel nemusí mít nainstalovanou aplikaci pro zpracování souboru, který spouštíte. Ve výchozím nastavení bude Systém Windows tyto případy zpracovávat tak, že uživateli poskytne odkaz na vyhledání vhodné aplikace ve Storu. Pokud chcete uživateli poskytnout konkrétní doporučení, kterou aplikaci by si měl v tomto scénáři pořídit, můžete to udělat předáním tohoto doporučení společně se souborem, který spouštíte. Uděláte to tak, že zavoláte metodu Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) s parametrem LauncherOptions.PreferredApplicationPackageFamilyName nastaveným na název rodiny balíčků aplikace ve Storu, kterou chcete doporučit. Potom nastavte LauncherOptions.PreferredApplicationDisplayName na název této aplikace. Windows tyto informace použije k nahrazení obecné možnosti vyhledání aplikace ve Storu konkrétní možností získání doporučené aplikace ze Storu.
Poznámka:
Obě tyto možnosti musíte nastavit tak, aby doporučovala aplikaci. Nastavení jednoho bez druhého způsobí selhání.
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
}
});
}
Spuštění s požadovaným zbývajícím zobrazením (pouze pro UWP)
Zdrojové aplikace, které volají LaunchFileAsync , si můžou vyžádat, aby zůstaly na obrazovce po spuštění souboru. Ve výchozím nastavení se Windows pokusí sdílet veškerý dostupný prostor rovnoměrně mezi zdrojová a cílovou aplikací, která soubor zpracovává. Zdrojové aplikace můžou použít vlastnost DesiredRemainingView k označení operačního systému, že preferují okno aplikace, aby zabírají více nebo méně dostupného místa. DesiredRemainingView lze také použít k označení, že zdrojová aplikace po spuštění souboru nemusí zůstat na obrazovce a může být zcela nahrazena cílovou aplikací. Tato vlastnost určuje pouze upřednostňovanou velikost okna volající aplikace. Nespecifikuje chování jiných aplikací, které se mohou také objevit současně na obrazovce.
Poznámka:
Systém Windows při určení konečné velikosti okna zdrojové aplikace bere v úvahu několik různých faktorů, například předvolbu zdrojové aplikace, počet aplikací na obrazovce, orientaci obrazovky atd. Nastavením DesiredRemainingView nemáte zaručené konkrétní chování okna pro zdrojovou aplikaci.
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
}
});
}
Poznámky
Aplikace nemůže vybrat spuštěnou aplikaci. Uživatel určí, která aplikace se spustí. Uživatel může vybrat buď aplikaci WinUI, nebo desktopovou aplikaci pro Windows.
Při spuštění souboru musí být aplikace v popředí, to znamená, že musí být viditelná pro uživatele. Tento požadavek pomáhá zajistit, aby uživatel zůstal pod kontrolou. Abyste tento požadavek splnili, ujistěte se, že všechny soubory svážete přímo s uživatelským rozhraním vaší aplikace. S největší pravděpodobností musí uživatel vždy provést nějakou akci, aby zahájil spuštění souboru.
Typy souborů, které obsahují kód nebo skript, nelze spustit, pokud je operační systém spouští automaticky, například .exe, .msia .js soubory. Toto omezení chrání uživatele před potenciálně škodlivými soubory, které by mohly změnit operační systém. Tuto metodu můžete použít ke spuštění typů souborů, které mohou obsahovat skript, pokud je spustí aplikace, která izoluje skript, například .docx soubory. Aplikace, jako je Microsoft Word, udržují skript v .docx souborech před úpravou operačního systému.
Pokud se pokusíte spustit omezený typ souboru, spuštění selže a vyvolá se zpětné volání chyby. Pokud vaše aplikace zpracovává mnoho různých typů souborů a očekáváte, že k této chybě dojde, doporučujeme, abyste uživateli poskytli náhradní prostředí. Uživateli můžete například dát možnost uložit soubor na plochu a otevřít ho tam.
Související obsah
Windows developer