ファイルに応じた既定のアプリの起動Launch the default app for a file

重要な APIImportant APIs

ファイルに応じて既定のアプリを起動する方法について説明します。Learn how to launch the default app for a file. 多くのアプリでは、アプリ自体で処理できないファイルを操作する必要が生じる場合があります。Many apps need to work with files that they can't handle themselves. たとえば、さまざまな種類のファイルを受け取るメール アプリは、これらのファイルを既定のハンドラーで起動する手段を備えている必要があります。For example, e-mail apps receive a variety of file types and need a way to launch these files in their default handlers. 以下の手順では、Windows.System.Launcher API を使って、アプリがそれ自体で処理できないファイルの既定のハンドラーを起動する方法を示します。These steps show how to use the Windows.System.Launcher API to launch the default handler for a file that your app can't handle itself.

ファイル オブジェクトを取得するGet the file object

最初にファイルの Windows.Storage.StorageFile オブジェクトを取得します。First, get a Windows.Storage.StorageFile object for the file.

ファイルがアプリのパッケージに含まれている場合は、Package.InstalledLocation プロパティで Windows.Storage.StorageFolder オブジェクトを取得し、Windows.Storage.StorageFolder.GetFileAsync メソッドで StorageFile オブジェクトを取得します。If the file is included in the package for your app, you can use the Package.InstalledLocation property to get a Windows.Storage.StorageFolder object and the Windows.Storage.StorageFolder.GetFileAsync method to get the StorageFile object.

ファイルが既知のフォルダー内にある場合には、Windows.Storage.KnownFolders クラスのプロパティで StorageFolder を取得し、GetFileAsync メソッドで StorageFile オブジェクトを取得します。If the file is in a known folder, you can use the properties of the Windows.Storage.KnownFolders class to get a StorageFolder and the GetFileAsync method to get the StorageFile object.

ファイルを起動するLaunch the file

Windows には、ファイルの既定のハンドラーを起動するためのいくつかの異なるオプションが用意されています。Windows provides several different options for launching the default handler for a file. これらのオプションについて、次の表とセクションで説明します。These options are described in this chart and in the sections that follow.

オプションOption メソッドMethod 説明Description
既定の起動Default launch LaunchFileAsync(IStorageFile) LaunchFileAsync(IStorageFile) 指定されたファイルを既定のハンドラーで起動します。Launch the specified file with the default handler.
[プログラムから開く] を使った起動Open With launch LaunchFileAsync(IStorageFile, LauncherOptions) LaunchFileAsync(IStorageFile, LauncherOptions) 指定されたファイルを [プログラムから開く] ダイアログでユーザーによって選択されたハンドラーを使って起動します。Launch the specified file letting the user pick the handler through the Open With dialog.
推奨されるアプリ フォールバックを使った起動Launch with a recommended app fallback LaunchFileAsync(IStorageFile, LauncherOptions) LaunchFileAsync(IStorageFile, LauncherOptions) 指定されたファイルを既定のハンドラーで起動します。Launch the specified file with the default handler. ハンドラーがシステムにインストールされていない場合は、ストアにあるアプリをユーザーに勧めます。If no handler is installed on the system, recommend an app in the store to the user.
画面上に留まった適切なビューを使った起動Launch with a desired remaining view (IStorageFile、LauncherOptions) LaunchFileAsync (Windows のみ)LaunchFileAsync(IStorageFile, LauncherOptions) (Windows-only) 指定されたファイルを既定のハンドラーで起動します。Launch the specified file with the default handler. 起動後も画面上に留まるように指定し、特定のウィンドウ サイズを要求します。Specify a preference to stay on screen after the launch and request a specific window size. LauncherOptions.DesiredRemainingView はモバイル デバイス ファミリでサポートされていません。LauncherOptions.DesiredRemainingView isn't supported on the mobile device family.

既定の起動Default launch

既定のアプリを起動するには、Windows.System.Launcher.LaunchFileAsync(IStorageFile) メソッドを呼び出します。Call the Windows.System.Launcher.LaunchFileAsync(IStorageFile) method to launch the default app. この例では Windows.Storage.StorageFolder.GetFileAsync メソッドを使って、このアプリ パッケージに含まれる画像ファイル test.png を起動します。This example uses the Windows.Storage.StorageFolder.GetFileAsync method to launch an image file, test.png, that is included in the app package.

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
      }
   });
}

[プログラムから開く] を使った起動Open With launch

LauncherOptions.DisplayApplicationPickertrue に設定して Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) メソッドを呼び出して、ユーザーが [プログラムから開く] ダイアログ ボックスで選んだアプリを起動します。Call the Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) method with LauncherOptions.DisplayApplicationPicker set to true to launch the app that the user selects from the Open With dialog box.

ユーザーが特定のファイルに既定以外のアプリを選ぶ場合は、 [プログラムから開く] ダイアログ ボックスを使うことをお勧めします。We recommend that you use the Open With dialog box when the user may want to select an app other than the default for a particular file. たとえば、アプリで画像ファイルを起動できる場合、既定のハンドラーは多くの場合ビューアー アプリです。For example, if your app allows the user to launch an image file, the default handler will likely be a viewer app. 場合によっては、ユーザーが画像の表示ではなく編集を行うこともあります。In some cases, the user may want to edit the image instead of viewing it. [プログラムから開く] オプションを AppBar またはコンテキスト メニューで代替コマンドと共に使って、ユーザーが [プログラムから開く] ダイアログを開き、このようなシナリオでエディター アプリを選択できるようにします。Use the Open With option along with an alternative command in the AppBar or in a context menu to let the user bring up the Open With dialog and select the editor app in these types of scenarios.

.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
      }
   });
}

フォールバックの推奨されるアプリを起動します。Launch with a recommended app fallback

場合によっては、起動中のファイルを処理するためのアプリがインストールされていないこともあります。In some cases the user may not have an app installed to handle the file that you are launching. 既定では、Windows はストア上の適切なアプリを検索するリンクを表示して、これらのケースに対処します。By default, Windows will handle these cases by providing the user with a link to search for an appropriate app on the store. このシナリオで入手するアプリに関する特定の推奨事項を示す場合は、起動中のファイルと共に推奨事項を渡すことができます。If you would like to give the user a specific recommendation for which app to acquire in this scenario, you may do so by passing that recommendation along with the file that you are launching. そのためには、LauncherOptions.PreferredApplicationPackageFamilyName を推奨するストア内のアプリのパッケージのファミリ名に設定して、Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) メソッドを呼び出します。To do this, call the Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) method with LauncherOptions.PreferredApplicationPackageFamilyName set to the package family name of the app in the Store that you want to recommend. その後、LauncherOptions.PreferredApplicationDisplayName をそのアプリの名前に設定します。Then, set the LauncherOptions.PreferredApplicationDisplayName to the name of that app. Windows ではこの情報を使って、ストア内のアプリを検索する一般的なオプションを、ストアから推奨アプリを入手する固有のオプションに置き換えます。Windows will use this information to replace the general option to search for an app in the store with a specific option to acquire the recommended app from the Store.

注意

アプリをお勧めします。 これらのオプションの両方を設定する必要があります。You must set both of these options to recommend an app. どちらか一方のみを設定した場合は、エラーになります。Setting one without the other will result in a failure.

.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 のみ)Launch with a Desired Remaining View (Windows-only)

LaunchFileAsync を呼び出すソース アプリは、ファイルの起動後も画面上に留まることを要求できます。Source apps that call LaunchFileAsync can request that they remain on screen after a file launch. 既定では、利用可能なスペース全体がソース アプリとファイルを処理するターゲット アプリとで均等に共有されます。By default, Windows attempts to share all available space equally between the source app and the target app that handles the file. ソース アプリでは、DesiredRemainingView プロパティを使って、利用可能なスペースをソース アプリのウィンドウがどの程度占めるかをオペレーティング システムに指示できます。Source apps can use the DesiredRemainingView property to indicate to the operating system that they prefer their app window to take up more or less of the available space. この DesiredRemainingView では、ファイルの起動後にソース アプリが画面上に留まる必要がなく、ターゲット アプリに完全に置き換わってもよいことも示せます。DesiredRemainingView can also be used to indicate that the source app does not need to remain on screen after the file launch and can be completely replaced by the target app. このプロパティは呼び出し元アプリの優先ウィンドウのサイズだけを指定します。This property only specifies the preferred window size of the calling app. 画面に同時に表示されている可能性のある他のアプリの動作は指定しません。It doesn't specify the behavior of other apps that may happen to also be on screen at the same time.

注意

Windows では、複数のさまざまな要素、たとえば、ソース アプリの最終的なウィンドウのサイズを決定する場合、ソース アプリの基本設定、画面、画面の向き、上のアプリの数が考慮されます。Windows takes into account multiple different factors when it determines the source app's final window size, for example, the preference of the source app, the number of apps on screen, the screen orientation, and so on. DesiredRemainingView を設定しても、ソース アプリの特定のウィンドウ動作が保証されるわけではありません。By setting DesiredRemainingView, you aren't guaranteed a specific windowing behavior for the source app.

**モバイル デバイス ファミリ:  **LauncherOptions.DesiredRemainingView はモバイル デバイス ファミリでサポートされていません。**Mobile device family:  **LauncherOptions.DesiredRemainingView isn't supported on the mobile device family.

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
      }
   });
}

注釈Remarks

起動するアプリをアプリが選ぶことはできません。Your app can't select the app that is launched. どのアプリを起動するかはユーザーが決めます。The user determines which app is launched. ユーザーは、ユニバーサル Windows プラットフォーム (UWP) アプリまたは Windows デスクトップ アプリを選択できます。The user can select either a Universal Windows Platform (UWP) app or a Windows desktop app.

ファイルの起動時、アプリはユーザーに表示されるフォアグラウンド アプリである必要があります。When launching a file, your app must be the foreground app, that is, it must be visible to the user. この要件は、ユーザーが制御を維持するのに役立ちます。This requirement helps ensure that the user remains in control. この要件を満たすために、すべてのファイル起動がアプリの UI に直接結び付けられていることを確認します。To meet this requirement, make sure that you tie all file launches directly to the UI of your app. ほとんどの場合、ファイル起動を開始するには、常にユーザーがなんらかの操作を行う必要があります。Most likely, the user must always take some action to initiate a file launch.

.exe、.msi、.js ファイルなど、オペレーティング システムによって自動的に実行されるコードまたはスクリプトを含むファイルの種類を起動することはできません。You can't launch file types that contain code or script if they are executed automatically by the operating system, such as, .exe, .msi, and .js files. この制約により、オペレーティング システムを変更する可能性のある、悪意のあるファイルからユーザーを保護できます。This restriction protects users from potentially malicious files that could modify the operating system. この方法では、.docx ファイルなど、スクリプトを分離するアプリによって実行されるスクリプトを含むファイルの種類を起動できます。You can use this method to launch file types that can contain script if they are executed by an app that isolates the script, such as, .docx files. Microsoft Word などのアプリは、.docx ファイルのスクリプトがオペレーティング システムを変更しないようにします。Apps like Microsoft Word keep the script in .docx files from modifying the operating system.

制限されている種類のファイルを起動しようとすると、起動は失敗し、エラー コールバックが呼び出されます。If you try to launch a restricted file type, the launch will fail and your error callback will be invoked. アプリがさまざまな種類のファイルを処理するため、このエラーの発生が予想される場合は、ユーザーにフォールバックを提供することをお勧めします。If your app handles many different types of files and you expect that you will hit this error, we recommend that you provide a fallback experience to your user. たとえば、ファイルをデスクトップに保存してそこで開けるようなオプションをユーザーに提供することができます。For example, you could give the user an option to save the file to the desktop, and they could open it there.

処理手順Tasks

ガイドラインGuidelines

リファレンスReference