Запуск приложения по умолчанию для файла
Важные API
Узнайте, как запустить приложение по умолчанию для файла. Многие приложения должны работать с файлами, которые они не могут обрабатывать сами. Например, приложения электронной почты получают различные типы файлов и требуют способа запуска этих файлов в обработчиках по умолчанию. В этих шагах показано, как использовать API Windows.System.Launcher для запуска обработчика по умолчанию для файла, который приложение не может обрабатывать сам.
Получение объекта файла
Сначала получите объект Windows.Storage.StorageFile для файла.
Если файл включен в пакет для приложения, можно использовать свойство Package.InstalledLocation, чтобы получить объект Windows.Storage.StorageFolder и метод Windows.StorageFolder.GetFileAsync, чтобы получить объект StorageFileAsync.
Если файл находится в известной папке, можно использовать свойства класса Windows.Storage.KnownFolders для получения объекта StorageFolder и метода GetFileAsync.
Запуск файла
Windows предоставляет несколько различных вариантов запуска обработчика по умолчанию для файла. Эти параметры описаны на этой диаграмме и в следующих разделах.
Вариант | Метод | Description |
---|---|---|
Запуск по умолчанию | LaunchFileAsync(IStorageFile) | Запустите указанный файл с обработчиком по умолчанию. |
Открыть с помощью запуска | LaunchFileAsync(IStorageFile, LauncherOptions) | Запустите указанный файл, позволяющий пользователю выбрать обработчик с помощью диалогового окна "Открыть с помощью". |
Запуск с помощью рекомендуемого резервного приложения | LaunchFileAsync(IStorageFile, LauncherOptions) | Запустите указанный файл с обработчиком по умолчанию. Если обработчик не установлен в системе, рекомендуется использовать приложение в магазине пользователю. |
Запуск с требуемым оставшимся представлением | LaunchFileAsync(IStorageFile, LauncherOptions) (только для Windows) | Запустите указанный файл с обработчиком по умолчанию. Укажите предпочтение, чтобы остаться на экране после запуска и запросить определенный размер окна. LauncherOptions.DesiredRemainingView не поддерживается в семействе мобильных устройств. |
Запуск по умолчанию
Вызовите метод Windows.System.Launcher.LaunchFileAsync(IStorageFile), чтобы запустить приложение по умолчанию. В этом примере используется метод Windows.StorageFolder.GetFileAsync для запуска файла образа, test.png, который входит в пакет приложения.
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
}
}
async Sub DefaultLaunch()
' Path to the file in the app package to launch
Dim imageFile = "images\test.png"
Dim file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(imageFile)
If file IsNot Nothing Then
' Launch the retrieved file
Dim success = await Windows.System.Launcher.LaunchFileAsync(file)
If success Then
' File launched
Else
' File launch failed
End If
Else
' Could not find file
End If
End Sub
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
}
});
}
Открыть с помощью запуска
Вызовите метод Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) с параметром LauncherOptions.DisplayApplicationPicker для запуска приложения, выбранного пользователем в диалоговом окне "Открыть с помощью".
Рекомендуется использовать диалоговое окно "Открыть с помощью" , если пользователь может выбрать приложение, отличное от значения по умолчанию для определенного файла. Например, если приложение позволяет пользователю запускать файл изображения, обработчик по умолчанию, скорее всего, будет приложением для просмотра. В некоторых случаях пользователю может потребоваться изменить изображение вместо просмотра. Используйте параметр Open With вместе с альтернативной командой в AppBar или в контекстном меню, чтобы разрешить пользователю открыть диалоговое окно "Открыть с помощью" и выбрать приложение редактора в этих типах сценариев.
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
}
}
async Sub DefaultLaunch()
' Path to the file in the app package to launch
Dim imageFile = "images\test.png"
Dim file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(imageFile)
If file IsNot Nothing Then
' Set the option to show the picker
Dim options = Windows.System.LauncherOptions()
options.DisplayApplicationPicker = True
' Launch the retrieved file
Dim success = await Windows.System.Launcher.LaunchFileAsync(file)
If success Then
' File launched
Else
' File launch failed
End If
Else
' Could not find file
End If
End Sub
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
}
});
}
Запуск с помощью рекомендуемого резервного приложения
В некоторых случаях у пользователя может быть не установлено приложение для обработки запущенного файла. По умолчанию Windows будет обрабатывать эти случаи, предоставив пользователю ссылку для поиска соответствующего приложения в магазине. Если вы хотите предоставить пользователю определенную рекомендацию для получения приложения в этом сценарии, это можно сделать, передав эту рекомендацию вместе с запущенным файлом. Для этого вызовите метод Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) с LauncherOptions.PreferredApplicationPackageFamilyName , указав имя семейства пакетов приложения в Магазине, которое вы хотите рекомендовать. Затем задайте для launcherOptions.PreferredApplicationDisplayName имя этого приложения. Windows будет использовать эти сведения для замены общего варианта поиска приложения в магазине определенным вариантом получения рекомендуемого приложения из Магазина.
Примечание.
Для рекомендаций приложения необходимо задать оба этих параметра. Установка одного без другого приведет к сбою.
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
}
}
async Sub DefaultLaunch()
' Path to the file in the app package to launch
Dim imageFile = "images\test.contoso"
' Get the image file from the package's image directory
Dim file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(imageFile)
If file IsNot Nothing Then
' Set the recommended app
Dim options = 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
Dim success = await Windows.System.Launcher.LaunchFileAsync(file)
If success Then
' File launched
Else
' File launch failed
End If
Else
' Could not find file
End If
End Sub
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
}
});
}
Запуск с требуемым оставшимся представлением (только для Windows)
Исходные приложения, вызывающие LaunchFileAsync , могут запросить, что они остаются на экране после запуска файла. По умолчанию Windows пытается совместно использовать все доступное пространство между исходным приложением и целевым приложением, обрабатывающим файл. Исходные приложения могут использовать свойство DesiredRemainingView , чтобы указать операционной системе, что они предпочитают, чтобы их окно приложения занимает больше или меньше доступного места. DesiredRemainingView также можно использовать для указания того, что исходное приложение не должно оставаться на экране после запуска файла и может быть полностью заменено целевым приложением. Это свойство указывает только предпочтительный размер окна вызывающего приложения. Он не указывает поведение других приложений, которые могут также находиться на экране одновременно.
Примечание.
Windows учитывает несколько различных факторов, когда он определяет окончательный размер окна исходного приложения, например предпочтения исходного приложения, количество приложений на экране, ориентацию экрана и т. д. Задав DesiredRemainingView, вы не гарантируете определенное поведение в окне для исходного приложения.
**Семейство мобильных устройств: **LauncherOptions.DesiredRemainingView не поддерживается в семействе мобильных устройств.
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
}
});
}
Замечания
Приложение не может выбрать запущенное приложение. Пользователь определяет, какое приложение запускается. Пользователь может выбрать приложение универсальная платформа Windows (UWP) или классическое приложение Windows.
При запуске файла приложение должно быть приложением переднего плана, то есть оно должно быть видимым для пользователя. Это требование помогает гарантировать, что пользователь остается под контролем. Чтобы выполнить это требование, убедитесь, что все файлы запускатся непосредственно к пользовательскому интерфейсу приложения. Скорее всего, пользователь всегда должен предпринять некоторые действия для запуска файла.
Вы не можете запускать типы файлов, содержащие код или скрипт, если они выполняются автоматически операционной системой, например, .exe, .msi и .js файлов. Это ограничение защищает пользователей от потенциально вредоносных файлов, которые могут изменить операционную систему. Этот метод можно использовать для запуска типов файлов, которые могут содержать скрипт, если они выполняются приложением, которое изолирует скрипт, например файлы .docx. Приложения, такие как Microsoft Word, сохраняют скрипт в .docx файлах от изменения операционной системы.
Если вы попытаетесь запустить ограниченный тип файла, запуск завершится ошибкой, и обратный вызов ошибки будет вызван. Если приложение обрабатывает множество различных типов файлов и ожидаете, что вы получите эту ошибку, рекомендуется предоставить пользователю резервный интерфейс. Например, вы можете предоставить пользователю возможность сохранить файл на рабочем столе и открыть его там.