Lancer l’application par défaut pour un fichier

API importantes

Découvrez comment lancer l’application par défaut d’un fichier. De nombreuses applications doivent utiliser des fichiers qu’elles ne peuvent pas gérer eux-mêmes. Par exemple, les applications de messagerie reçoivent divers types de fichiers et ont besoin d’un moyen de lancer ces fichiers dans leurs gestionnaires par défaut. Ces étapes montrent comment utiliser l’API Windows.System.Launcher pour lancer le gestionnaire par défaut d’un fichier que votre application ne peut pas gérer lui-même.

Obtenir l’objet fichier

Tout d’abord, obtenez un objet Windows.Storage.StorageFile pour le fichier.

Si le fichier est inclus dans le package de votre application, vous pouvez utiliser la propriété Package.InstalledLocation pour obtenir un objet Windows.Storage.StorageFolder et la méthode Windows.Storage.StorageFolder.GetFileAsync pour obtenir l’objet StorageFile.

Si le fichier se trouve dans un dossier connu, vous pouvez utiliser les propriétés de la classe Windows.Storage.KnownFolders pour obtenir un StorageFolder et la méthode GetFileAsync pour obtenir l’objet StorageFile.

Lancer le fichier

Windows propose plusieurs options différentes pour lancer le gestionnaire par défaut d’un fichier. Ces options sont décrites dans ce graphique et dans les sections qui suivent.

Option Méthode Description
Lancement par défaut LaunchFileAsync(IStorageFile) Lancez le fichier spécifié avec le gestionnaire par défaut.
Ouvrir avec lancement LaunchFileAsync(IStorageFile, LauncherOptions) Lancez le fichier spécifié pour permettre à l’utilisateur de choisir le gestionnaire via la boîte de dialogue Ouvrir avec.
Lancer avec une secours d’application recommandée LaunchFileAsync(IStorageFile, LauncherOptions) Lancez le fichier spécifié avec le gestionnaire par défaut. Si aucun gestionnaire n’est installé sur le système, recommandez une application dans le Windows Store à l’utilisateur.
Lancer avec une vue restante souhaitée LaunchFileAsync(IStorageFile, LauncherOptions) (Windows uniquement) Lancez le fichier spécifié avec le gestionnaire par défaut. Spécifiez une préférence pour rester à l’écran après le lancement et demander une taille de fenêtre spécifique. LauncherOptions.DesiredRemainingView n’est pas pris en charge sur la famille d’appareils mobiles.

Lancement par défaut

Appelez la méthode Windows.System.Launcher.LaunchFileAsync(IStorageFile) pour lancer l’application par défaut. Cet exemple utilise la méthode Windows.Storage.StorageFolder.GetFileAsync pour lancer un fichier image, test.png, inclus dans le package d’application.

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

Ouvrir avec lancement

Appelez la méthode Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) avec LauncherOptions.DisplayApplicationPicker défini sur true pour lancer l’application que l’utilisateur sélectionne dans la boîte de dialogue Ouvrir avec.

Nous vous recommandons d’utiliser la boîte de dialogue Ouvrir avec lorsque l’utilisateur peut sélectionner une application autre que la valeur par défaut d’un fichier particulier. Par exemple, si votre application permet à l’utilisateur de lancer un fichier image, le gestionnaire par défaut sera probablement une application visionneuse. Dans certains cas, l’utilisateur peut vouloir modifier l’image au lieu de l’afficher. Utilisez l’option Ouvrir with avec une autre commande dans AppBar ou dans un menu contextuel pour permettre à l’utilisateur d’afficher la boîte de dialogue Ouvrir avec et de sélectionner l’application d’éditeur dans ces types de scénarios.

la boîte de dialogue ouvrir avec un lancement de fichier .png. la boîte de dialogue contient une case à cocher qui spécifie si le choix de l’utilisateur doit être utilisé pour tous les fichiers .png ou simplement celui-ci .png fichier. la boîte de dialogue contient quatre options d’application pour lancer le fichier et un lien « plus d’options ».

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

Lancer avec une secours d’application recommandée

Dans certains cas, l’utilisateur n’a peut-être pas installé une application pour gérer le fichier que vous lancez. Par défaut, Windows gère ces cas en fournissant à l’utilisateur un lien pour rechercher une application appropriée sur le Store. Si vous souhaitez donner à l’utilisateur une recommandation spécifique pour laquelle l’application doit acquérir dans ce scénario, vous pouvez le faire en transmettant cette recommandation avec le fichier que vous lancez. Pour ce faire, appelez la méthode Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) avec LauncherOptions.PreferredApplicationPackageFamilyName défini sur le nom de famille de package de l’application dans le Store que vous souhaitez recommander. Ensuite, définissez LauncherOptions.PreferredApplicationDisplayName sur le nom de cette application. Windows utilisera ces informations pour remplacer l’option générale permettant de rechercher une application dans le Windows Store par une option spécifique pour acquérir l’application recommandée à partir du Store.

Remarque

Vous devez définir ces deux options pour recommander une application. La définition d’un sans l’autre entraîne un échec.

l’ouverture avec la boîte de dialogue d’un lancement de fichier .contoso. étant donné que .contoso n’a pas de gestionnaire installé sur l’ordinateur, la boîte de dialogue contient une option avec l’icône de magasin et le texte qui pointe l’utilisateur vers le gestionnaire approprié sur le magasin. la boîte de dialogue contient également un lien « plus d’options ».

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

Lancer avec une vue restante souhaitée (Windows uniquement)

Les applications sources qui appellent LaunchFileAsync peuvent demander qu’elles restent à l’écran après le lancement d’un fichier. Par défaut, Windows tente de partager tout l’espace disponible de façon égale entre l’application source et l’application cible qui gère le fichier. Les applications sources peuvent utiliser la propriété DesiredRemainingView pour indiquer au système d’exploitation qu’elles préfèrent que leur fenêtre d’application prenne plus ou moins de l’espace disponible. DesiredRemainingView peut également être utilisé pour indiquer que l’application source n’a pas besoin de rester à l’écran après le lancement du fichier et peut être complètement remplacée par l’application cible. Cette propriété spécifie uniquement la taille de fenêtre préférée de l’application appelante. Elle ne spécifie pas le comportement d’autres applications qui peuvent se trouver à l’écran en même temps.

Remarque

Windows prend en compte plusieurs facteurs différents lorsqu’il détermine la taille finale de la fenêtre de l’application source, par exemple la préférence de l’application source, le nombre d’applications à l’écran, l’orientation de l’écran, etc. En définissant DesiredRemainingView, vous n’êtes pas garanti un comportement de fenêtrage spécifique pour l’application source.

**Famille d’appareils mobiles : **LauncherOptions.DesiredRemainingView n’est pas prise en charge sur la famille d’appareils mobiles.

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

Notes

Votre application ne peut pas sélectionner l’application lancée. L’utilisateur détermine l’application qui est lancée. L’utilisateur peut sélectionner une application plateforme Windows universelle (UWP) ou une application de bureau Windows.

Lors du lancement d’un fichier, votre application doit être au premier plan, c’est-à-dire qu’elle doit être visible par l’utilisateur. Cette exigence permet de s’assurer que l’utilisateur garde le contrôle. Pour répondre à cette exigence, veillez à lier tous les fichiers directement à l’interface utilisateur de votre application. Probablement, l’utilisateur doit toujours entreprendre une action pour lancer un fichier.

Vous ne pouvez pas lancer de types de fichiers qui contiennent du code ou un script s’ils sont exécutés automatiquement par le système d’exploitation, par exemple, .exe, .msi et .js fichiers. Cette restriction protège les utilisateurs contre les fichiers potentiellement malveillants susceptibles de modifier le système d’exploitation. Vous pouvez utiliser cette méthode pour lancer des types de fichiers qui peuvent contenir un script s’ils sont exécutés par une application qui isole le script, par exemple, .docx fichiers. Les applications telles que Microsoft Word conservent le script dans .docx fichiers de modifier le système d’exploitation.

Si vous essayez de lancer un type de fichier restreint, le lancement échoue et votre rappel d’erreur est appelé. Si votre application gère de nombreux types de fichiers différents et que vous vous attendez à ce que vous rencontriez cette erreur, nous vous recommandons de fournir une expérience de secours à votre utilisateur. Par exemple, vous pouvez permettre à l’utilisateur d’enregistrer le fichier sur le bureau et de l’ouvrir.

Tâches

Consignes

Référence