ファイルに応じて既定のアプリを起動する方法 (HTML)

ファイルに応じて既定のアプリを起動する方法について説明します。多くのアプリでは、アプリ自体で処理できないファイルを操作する必要が生じる場合があります。たとえば、さまざまな種類のファイルを受け取るメール アプリは、これらのファイルを既定のハンドラーで起動する手段を備えている必要があります。

以下の手順では、Windows.System.Launcher API を使って、アプリがそれ自体で処理できないファイルの既定のハンドラーを起動する方法を示します。

手順

ステップ 1: ファイルを取得する

最初にファイルの Windows.Storage.StorageFile オブジェクトを取得します。

ファイルがアプリのパッケージに含まれている場合は、Package.installedLocation プロパティで Windows.Storage.StorageFolder オブジェクトを取得し、Windows.Storage.StorageFolder.getFileAsync メソッドで StorageFile オブジェクトを取得します。

ファイルが既知のフォルダー内にある場合には、Windows.Storage.KnownFolders クラスのプロパティで StorageFolder を取得し、getFileAsync メソッドで StorageFile オブジェクトを取得します。

ステップ 2: ファイルを起動する

Windows には、ファイルの既定のハンドラーを起動するためのいくつかの異なるオプションが用意されています。これらのオプションについて、次の表とセクションで説明します。

オプション メソッド 説明
既定の起動 LaunchFileAsync(IStorageFile) 指定されたファイルを既定のハンドラーで起動します。
[プログラムから開く] を使った起動 LaunchFileAsync(IStorageFile, LauncherOptions) 指定されたファイルを [プログラムから開く] ダイアログでユーザーによって選択されたハンドラーを使って起動します。
推奨されるアプリ フォールバックを使った起動 LaunchFileAsync(IStorageFile, LauncherOptions) 指定されたファイルを既定のハンドラーで起動します。ハンドラーがシステムにインストールされていない場合は、ストアにあるアプリをユーザーに勧めます。
画面上に留まった適切なビューを使った起動 LaunchFileAsync(IStorageFile, LauncherOptions)(Windows のみ) 指定されたファイルを既定のハンドラーで起動します。起動後も画面上に留まるように指定し、特定のウィンドウ サイズを要求します。

Windows 8.1:  [LauncherOptions.DesiredRemainingView] は Windows 8.1 と Windows Server 2012 R2 までサポートされません。

Windows Phone:  [LauncherOptions.DesiredRemainingView] は、Windows Phone ではサポートされていません。

 

Default launch

既定のアプリを起動するには、Windows.System.Launcher.launchFileAsync(IStorageFile) メソッドを呼び出します。この例では Windows.Storage.StorageFolder.getFileAsync メソッドを使って、このアプリ パッケージに含まれる画像ファイル test.png を起動します。


// Path to the file in the app package to launch
var imageFile = "images\\test.png";

// Get the image file from the package's image directory
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync(imageFile).then(
  function (file) {
    // Launch the retrieved file using the default app
    Windows.System.Launcher.launchFileAsync(file).then(
      function (success) {
        if (success) {
            // File launched
        } else {
            // File launch failed
        }
      });
  });

Open with launch

LauncherOptions.displayApplicationPickertrue に設定して Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) メソッドを呼び出して、ユーザーが [プログラムから開く] ダイアログ ボックスで選んだアプリを起動します。

ユーザーが特定のファイルに既定以外のアプリを選ぶ場合は、[プログラムから開く] ダイアログ ボックスを使うことをお勧めします。 たとえば、アプリで画像ファイルを起動できる場合、既定のハンドラーは多くの場合ビューアー アプリです。 場合によっては、ユーザーが画像の表示ではなく編集を行うこともあります。[プログラムから開く] オプションを AppBar またはコンテキスト メニューで代替コマンドと共に使って、ユーザーが [プログラムから開く] ダイアログを開き、このようなシナリオでエディター アプリを選択できるようにします。

.png ファイルに対する [プログラムから開く] ダイアログが起動されます。このダイアログには、ユーザーによって選択されたアプリをすべての .png ファイルに使用するかまたはこの 1 つの .png ファイルのみに使用するかを指定するチェック ボックスがあります。また、このダイアログには、ファイルの起動に関する 4 つのアプリ オプションと、[その他のオプション] リンクがあります。


// Path to the file in the app package to launch
var imageFile = "images\\test.png";

// Get the image file from the package's image directory
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync(imageFile).then(
  function (file) {
    // Set the show picker option
    var options = new Windows.System.LauncherOptions();
    options.displayApplicationPicker = true;

    // Launch the retrieved file using the selected app
    Windows.System.Launcher.launchFileAsync(file, options).then(
      function (success) {
        if (success) {
            // File launched
        } else {
            // File launch failed
        }
      });
  });

Launch with a recommended app fallback

場合によっては、起動中のファイルを処理するアプリがインストールされていないこともあります。既定では、オペレーティング システムによってストア上の適切なアプリを検索するリンクが表示されて、これらのケースは対処されます。このシナリオで入手するアプリに関する特定の推奨事項を示す場合は、起動中のファイルと共に推奨事項を渡すことができます。そのためには、LauncherOptions.preferredApplicationPackageFamilyName を推奨するストア内のアプリのパッケージ ファミリ名に設定して、Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) メソッドを呼び出します。 その後、LauncherOptions.preferredApplicationDisplayName をそのアプリの名前に設定します。オペレーティング システムではこの情報を使って、ストア内のアプリを検索する一般的なオプションを、ストアから推奨アプリを入手する固有のオプションに置き換えます。

  アプリを推奨するには、これらの両方のオプションを設定する必要があります。どちらか一方のみを設定した場合は、エラーになります。

 

.contoso ファイルの起動のための [プログラムから開く] ダイアログ。コンピューターには .contoso に対応するハンドラーがインストールされていないため、このダイアログには、ストア アイコンとストア上の適切なハンドラーをユーザーに通知するテキストを含むオプションが表示されます。このダイアログには、[その他のオプション] リンクもあります。


// Path to the file in the app package to launch
var imageFile = "images\\test.contoso";

// Get the image file from the package's image directory
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync(imageFile).then(
  function (file) {
    // 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
    Windows.System.Launcher.launchFileAsync(file, options).then(
      function (success) {
        if (success) {
            // File launched
        } else {
            // File launch failed
        }
      });
  });

画面上に留まった適切なビューを使った起動 (Windows のみ)

LaunchFileAsync を呼び出すソース アプリは、ファイルの起動後も画面上に留まることを要求できます。既定では、利用可能なスペース全体がソース アプリとファイルを処理するターゲット アプリとで均等に共有されます。ソース アプリでは、DesiredRemainingView プロパティを使って、利用可能なスペースをソース アプリのウィンドウがどの程度占めるかをオペレーティング システムに指示できます。この DesiredRemainingView では、ファイルの起動後にソース アプリが画面上に留まる必要がなく、ターゲット アプリに完全に置き換わっても良いことも示せます。このプロパティは呼び出し元アプリの優先ウィンドウのサイズだけを指定します。画面に同時に表示されている可能性のある他のアプリの動作は指定しません。

  ソース アプリの最終的なウィンドウ サイズは、複数の異なる要素が考慮されて決定されます。たとえば、ソース アプリの設定、画面上のアプリの数、画面の向きなどです。DesiredRemainingView を設定しても、ソース アプリの特定のウィンドウ動作が保証されるわけではありません。

 

Windows 8.1: LauncherOptions.DesiredRemainingView は Windows 8.1 と Windows Server 2012 R2 までサポートされません。

Windows Phone: LauncherOptions.DesiredRemainingView は、Windows Phone ではサポートされていません。

// Path to the file in the app package to launch
var imageFile = "images\\test.png";

// Get the image file from the package's image directory
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync(imageFile).done(
  function (file) {
    // Set the desired remaining view
    var options = new Windows.System.LauncherOptions();
    options.desiredRemainingView = Windows.UI.ViewManagement.ViewSizePreference.useLess;

    // Launch the retrieved file using the selected app
    Windows.System.Launcher.launchFileAsync(file, options).done(
      function (success) {
        if (success) {
            // File launched
        } else {
            // File launch failed
        }
      });
  });

注釈

起動するアプリをアプリが選ぶことはできません。どのアプリを起動するかはユーザーが決めます。ユーザーは Windows ストア アプリまたはデスクトップ アプリを選ぶことができます。

ファイルの起動時、アプリはユーザーに表示されるフォアグラウンド アプリである必要があります。この要件は、ユーザーが制御を維持するのに役立ちます。この要件を満たすために、すべてのファイル起動がアプリの UI に直接結び付けられていることを確認します。 ほとんどの場合、ファイル起動を開始するには、常にユーザーがなんらかの操作を行う必要があります。ファイルを起動しようとしたときにアプリがフォアグラウンドにない場合、起動は失敗し、エラー コールバックが呼び出されます。

.exe、.msi、.js ファイルなど、オペレーティング システムによって自動的に実行されるコードまたはスクリプトを含むファイルの種類を起動することはできません。この制約により、オペレーティング システムを変更する可能性のある、悪意のあるファイルからユーザーを保護できます。この方法では、.docx ファイルなど、スクリプトを分離するアプリによって実行されるスクリプトを含むファイルの種類を起動できます。Microsoft Word などのアプリは、.docx ファイルのスクリプトがオペレーティング システムを変更しないようにします。

制限されている種類のファイルを起動しようとすると、起動は失敗し、エラー コールバックが呼び出されます。アプリがさまざまな種類のファイルを処理するため、このエラーの発生が予想される場合は、ユーザーにフォールバックを提供することをお勧めします。たとえば、ファイルをデスクトップに保存してそこで開けるようなオプションをユーザーに提供することができます。

完全な例

関連付けによる起動のサンプル (Windows) に関するページをご覧ください。

関連トピック

タスク

ファイルのアクティブ化を処理する方法

URI に応じて既定のアプリを起動する方法

ガイドライン

ファイルの種類と URI のガイドラインとチェック リスト

辞書/リファレンス

Windows.Storage.StorageFile

Windows.System.Launcher.launchFileAsync