Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dowiedz się, jak uruchomić domyślną aplikację dla pliku z poziomu interfejsu WinUI, platformy uniwersalnej systemu Windows (UWP) lub innej aplikacji klasycznej. Wiele aplikacji musi pracować z plikami, których nie mogą sobie poradzić. Na przykład aplikacje poczty e-mail otrzymują różne typy plików i wymagają sposobu uruchamiania tych plików w domyślnych programach obsługi. W tych krokach pokazano, jak używać interfejsu API Windows.System.Launcher Środowiska uruchomieniowego systemu Windows (WinRT), aby uruchomić domyślną procedurę obsługi pliku, którego aplikacja nie może obsłużyć.
Ważne interfejsy API
W tym temacie przedstawiono następujące interfejsy API:
Notatka
O ile nie określono inaczej, wszystkie interfejsy API WinRT używane w tym temacie mogą być używane zarówno w aplikacjach platformy UWP, aplikacjach WinUI, jak i innych aplikacjach klasycznych. Aby dowiedzieć się więcej na temat umożliwienia aplikacjom klasycznym pracy z interfejsami API środowiska wykonawczego systemu Windows, zobacz Wywoływanie interfejsów API środowiska wykonawczego systemu Windows w aplikacjach klasycznych.
Pobieranie obiektu pliku
Najpierw pobierz obiekt Windows.Storage.StorageFile pliku.
Jeśli plik jest dołączony do pakietu Twojej aplikacji, możesz użyć właściwości Package.InstalledLocation, aby uzyskać obiekt Windows.Storage.StorageFolder, oraz metody Windows.Storage.StorageFolder.GetFileAsync, aby uzyskać obiekt StorageFile.
Jeśli plik znajduje się w znanym folderze, możesz użyć właściwości klasy Windows.Storage.KnownFolders, aby uzyskać StorageFolder i metodę GetFileAsync, aby uzyskać obiekt StorageFile.
Uruchamianie pliku
System Windows udostępnia kilka różnych opcji uruchamiania domyślnej procedury obsługi pliku. Te opcje są opisane na tym wykresie i w poniższych sekcjach.
| Opcja | Metoda | Opis |
|---|---|---|
| Uruchamianie domyślne | LaunchFileAsync(IStorageFile) | Uruchom określony plik za pomocą domyślnej aplikacji. |
| Otwórz za pomocą uruchamiania | LaunchFileAsync(IStorageFile, LauncherOptions) | Uruchom określony plik, aby użytkownik wybrał procedurę obsługi za pomocą okna dialogowego Otwórz za pomocą. |
| Uruchom z zalecaną aplikacją zapasową | LaunchFileAsync(IStorageFile, LauncherOptions) | Uruchom określony plik za pomocą domyślnego programu. Jeśli program obsługi nie jest zainstalowany w systemie, zalecamy użytkownikowi aplikację w sklepie. |
| Uruchamianie z żądanym pozostałym widokiem | LaunchFileAsync(IStorageFile, LauncherOptions) (tylko system Windows) | Uruchom określony plik z domyślną procedurą obsługi. Określ preferencję, aby pozostać na ekranie po uruchomieniu i ustal określony rozmiar okna. LauncherOptions.DesiredRemainingView nie jest obsługiwana w rodzinie urządzeń przenośnych. |
Domyślne uruchomienie
Wywołaj metodę Windows.System.Launcher.LaunchFileAsync(IStorageFile), aby uruchomić aplikację domyślną. W tym przykładzie użyto metody Windows.Storage.StorageFolder.GetFileAsync, aby uruchomić plik obrazu, test.png, który znajduje się w pakiecie aplikacji.
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
}
});
}
Otwórz za pomocą uruchamiania
Wywołaj metodę Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) z ustawionymi opcjami LauncherOptions.DisplayApplicationPicker na true, aby uruchomić aplikację wybraną przez użytkownika z okna dialogowego Otwórz za pomocą.
Zalecamy użycie okna dialogowego Otwórz za pomocą, gdy użytkownik może chcieć wybrać aplikację inną niż domyślna dla określonego pliku. Jeśli na przykład aplikacja umożliwia użytkownikowi uruchomienie pliku obrazu, domyślna procedura obsługi będzie prawdopodobnie aplikacją przeglądarki. W niektórych przypadkach użytkownik może chcieć edytować obraz zamiast go wyświetlać. Użyj opcji Otwórz za pomocą wraz z alternatywnym poleceniem w AppBar lub w menu kontekstowym, aby umożliwić użytkownikowi wyświetlenie okna dialogowego Otwórz za pomocą i wybranie aplikacji edytora w tych typach scenariuszy.
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
}
});
}
Uruchom za pomocą zalecanej aplikacji jako alternatywy
W niektórych przypadkach użytkownik może nie mieć zainstalowanej aplikacji do obsługi uruchamianego pliku. Domyślnie system Windows będzie obsługiwał te przypadki, udostępniając użytkownikowi link do wyszukiwania odpowiedniej aplikacji w sklepie. Jeśli chcesz nadać użytkownikowi konkretne zalecenie dotyczące aplikacji do uzyskania w tym scenariuszu, możesz to zrobić, przekazując to zalecenie wraz z uruchomionym plikiem. W tym celu wywołaj metodę Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) za pomocą metody LauncherOptions.PreferredApplicationPackageFamilyName ustawioną na nazwę rodziny pakietów aplikacji w sklepie, którą chcesz zalecić. Następnie ustaw LauncherOptions.PreferredApplicationDisplayName na nazwę tej aplikacji. System Windows użyje tych informacji, aby zastąpić ogólną opcję wyszukiwania aplikacji w sklepie określoną opcją uzyskania zalecanej aplikacji ze Sklepu.
Notatka
Aby zalecić aplikację, należy ustawić obie te opcje. Ustawienie jednego bez drugiego spowoduje awarię.
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
}
});
}
Uruchamianie z żądanym widokiem pozostałym (tylko platforma UWP)
Aplikacje źródłowe wywołujące LaunchFileAsync mogą zażądać, aby pozostały na ekranie po uruchomieniu pliku. Domyślnie system Windows próbuje udostępnić wszystkie dostępne miejsce w równym stopniu między aplikacją źródłową a aplikacją docelową, która obsługuje plik. Aplikacje źródłowe mogą używać właściwości DesiredRemainingView, aby wskazać systemowi operacyjnemu, że preferują okno aplikacji, aby zajęło mniej lub więcej dostępnego miejsca. DesiredRemainingView można również użyć do wskazania, że aplikacja źródłowa nie musi pozostać na ekranie po uruchomieniu pliku i może zostać całkowicie zastąpiona przez aplikację docelową. Ta właściwość określa tylko preferowany rozmiar okna aplikacji wywołującej. Nie określa ona zachowania innych aplikacji, które mogą wystąpić również na ekranie w tym samym czasie.
Notatka
System Windows uwzględnia wiele różnych czynników podczas określania końcowego rozmiaru okna aplikacji źródłowej, na przykład preferencji aplikacji źródłowej, liczby aplikacji na ekranie, orientacji ekranu itd. Ustawienie DesiredRemainingViewnie gwarantuje określonego zachowania okna dla aplikacji źródłowej.
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
}
});
}
Uwagi
Twoja aplikacja nie może wybrać aplikacji, która ma zostać uruchomiona. Użytkownik określa, która aplikacja jest uruchamiana. Użytkownik może wybrać albo aplikację platformy uniwersalnej systemu Windows, albo klasyczną aplikację desktopową systemu Windows.
Podczas uruchamiania pliku aplikacja musi być aplikacją pierwszego planu, czyli musi być widoczna dla użytkownika. To wymaganie pomaga zapewnić, że użytkownik pozostaje pod kontrolą. Aby spełnić to wymaganie, upewnij się, że wszystkie pliki są uruchamiane bezpośrednio w interfejsie użytkownika aplikacji. Najprawdopodobniej użytkownik musi zawsze podjąć jakąś akcję, aby zainicjować uruchomienie pliku.
Nie można uruchomić typów plików zawierających kod lub skrypt, jeśli są one wykonywane automatycznie przez system operacyjny, takie jak .exe, .msii pliki .js. To ograniczenie chroni użytkowników przed potencjalnie złośliwymi plikami, które mogą modyfikować system operacyjny. Za pomocą tej metody można uruchomić typy plików, które mogą zawierać skrypt, jeśli są wykonywane przez aplikację, która izoluje skrypt, na przykład pliki .docx. Aplikacje, takie jak Microsoft Word, przechowują skrypt w plikach .docx przed modyfikowaniem systemu operacyjnego.
Jeśli spróbujesz uruchomić ograniczony typ pliku, uruchomienie zakończy się niepowodzeniem, a zostanie wywołane wywołanie zwrotne błędu. Jeśli aplikacja obsługuje wiele różnych typów plików i oczekujesz, że wystąpi ten błąd, zalecamy udostępnienie użytkownikowi środowiska rezerwowego. Możesz na przykład nadać użytkownikowi opcję zapisania pliku na pulpicie i otworzyć go tam.
Powiązana zawartość
Windows developer