Поделиться через


Запуск приложения по умолчанию для файла

Важные 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 или в контекстном меню, чтобы разрешить пользователю открыть диалоговое окно "Открыть с помощью" и выбрать приложение редактора в этих типах сценариев.

открытие с диалоговым окном для запуска .png файла. Диалоговое окно содержит флажок, указывающий, следует ли использовать выбор пользователя для всех .png файлов или только для этого файла .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)
   {
      // 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 будет использовать эти сведения для замены общего варианта поиска приложения в магазине определенным вариантом получения рекомендуемого приложения из Магазина.

Примечание.

Для рекомендаций приложения необходимо задать оба этих параметра. Установка одного без другого приведет к сбою.

Открытие с диалоговым окном для запуска файла contoso. так как в .contoso нет обработчика, установленного на компьютере, диалоговое окно содержит параметр со значком магазина и текстом, указывающим пользователю на правильный обработчик в магазине. Диалоговое окно также содержит ссылку

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 файлах от изменения операционной системы.

Если вы попытаетесь запустить ограниченный тип файла, запуск завершится ошибкой, и обратный вызов ошибки будет вызван. Если приложение обрабатывает множество различных типов файлов и ожидаете, что вы получите эту ошибку, рекомендуется предоставить пользователю резервный интерфейс. Например, вы можете предоставить пользователю возможность сохранить файл на рабочем столе и открыть его там.

Задачи

Рекомендации

Справочные материалы