Iniciar la aplicación predeterminada de un archivo
API importantes
Aprende cómo iniciar la aplicación predeterminada de un archivo. Muchas aplicaciones necesitan trabajar con archivos que no se pueden controlar a sí mismos. Por ejemplo, las aplicaciones de correo electrónico reciben una variedad de tipos de archivo y necesitan una manera de iniciar estos archivos en sus controladores predeterminados. Estos pasos muestran cómo usar la API Windows.System.Launcher para iniciar el controlador predeterminado de un archivo que la aplicación no puede controlar.
Obtener el objeto de archivo
En primer lugar, obtenga un objeto Windows.Storage.StorageFile para el archivo.
Si el archivo se incluye en el paquete de la aplicación, puede usar la propiedad Package.InstalledLocation para obtener un objeto Windows.Storage.StorageFolder y el método Windows.Storage.StorageFolder.GetFileAsync para obtener el objeto StorageFile.
Si el archivo está en una carpeta conocida, puede usar las propiedades de la clase Windows.Storage.KnownFolders para obtener un storageFolder y el método GetFileAsync para obtener el objeto StorageFile.
Iniciar el archivo
Windows proporciona varias opciones diferentes para iniciar el controlador predeterminado para un archivo. Estas opciones se describen en este gráfico y en las secciones siguientes.
Opción | Method | Descripción |
---|---|---|
Inicio predeterminado | LaunchFileAsync(IStorageFile) | Inicie el archivo especificado con el controlador predeterminado. |
Abrir con inicio | LaunchFileAsync(IStorageFile, LauncherOptions) | Inicie el archivo especificado que permite al usuario seleccionar el controlador a través del cuadro de diálogo Abrir con. |
Inicio con una reserva de aplicaciones recomendada | LaunchFileAsync(IStorageFile, LauncherOptions) | Inicie el archivo especificado con el controlador predeterminado. Si no hay ningún controlador instalado en el sistema, recomiende una aplicación de la tienda al usuario. |
Iniciar con una vista restante deseada | LaunchFileAsync(IStorageFile, LauncherOptions) (solo Windows) | Inicie el archivo especificado con el controlador predeterminado. Especifique una preferencia para permanecer en pantalla después del inicio y solicitar un tamaño de ventana específico. LauncherOptions.DesiredRemainingView no se admite en la familia de dispositivos móviles. |
Inicio predeterminado
Llame al método Windows.System.Launcher.LaunchFileAsync(IStorageFile) para iniciar la aplicación predeterminada. En este ejemplo se usa el método Windows.Storage.StorageFolder.GetFileAsync para iniciar un archivo de imagen, test.png, que se incluye en el paquete de la aplicación.
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
}
});
}
Abrir con inicio
Llame al método Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions) con LauncherOptions.DisplayApplicationPicker establecido en true para iniciar la aplicación que el usuario selecciona en el cuadro de diálogo Abrir con.
Se recomienda usar el cuadro de diálogo Abrir con cuando el usuario quiera seleccionar una aplicación distinta de la predeterminada para un archivo determinado. Por ejemplo, si la aplicación permite al usuario iniciar un archivo de imagen, es probable que el controlador predeterminado sea una aplicación de visor. En algunos casos, es posible que el usuario quiera editar la imagen en lugar de verla. Use la opción Abrir con junto con un comando alternativo en appBar o en un menú contextual para permitir que el usuario abra el cuadro de diálogo Abrir con y seleccione la aplicación del editor en estos tipos de escenarios.
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
}
});
}
Inicio con una reserva de aplicaciones recomendada
En algunos casos, es posible que el usuario no tenga instalada una aplicación para controlar el archivo que está iniciando. De forma predeterminada, Windows controlará estos casos proporcionando al usuario un vínculo para buscar una aplicación adecuada en la tienda. Si desea dar al usuario una recomendación específica para la que se va a adquirir la aplicación en este escenario, puede hacerlo pasando esa recomendación junto con el archivo que está iniciando. Para ello, llame al método Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) con LauncherOptions.PreferredApplicationPackageFamilyName establecido en el nombre de familia del paquete de la aplicación en la Tienda que quieres recomendar. A continuación, establezca LauncherOptions.PreferredApplicationDisplayName en el nombre de esa aplicación. Windows usará esta información para reemplazar la opción general para buscar una aplicación en la tienda con una opción específica para adquirir la aplicación recomendada de la Tienda.
Nota:
Debe establecer ambas opciones para recomendar una aplicación. Si se establece uno sin el otro, se producirá un error.
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
}
});
}
Iniciar con una vista restante deseada (solo Windows)
Las aplicaciones de origen que llaman a LaunchFileAsync pueden solicitar que permanezcan en pantalla después de iniciar un archivo. De forma predeterminada, Windows intenta compartir todo el espacio disponible de forma equitativa entre la aplicación de origen y la aplicación de destino que controla el archivo. Las aplicaciones de origen pueden usar la propiedad DesiredRemainingView para indicar al sistema operativo que prefieren que su ventana de aplicación ocupe más o menos espacio disponible. DesiredRemainingView también se puede usar para indicar que la aplicación de origen no necesita permanecer en pantalla después del inicio del archivo y se puede reemplazar por completo por la aplicación de destino. Esta propiedad solo especifica el tamaño de ventana preferido de la aplicación que llama. No especifica el comportamiento de otras aplicaciones que puedan estar en pantalla al mismo tiempo.
Nota:
Windows tiene en cuenta varios factores diferentes cuando determina el tamaño final de la ventana de la aplicación de origen, por ejemplo, la preferencia de la aplicación de origen, el número de aplicaciones en pantalla, la orientación de la pantalla, etc. Al configurar DesiredRemainingView, no se garantiza un comportamiento específico de las ventanas de la aplicación de origen.
**Familia de dispositivos móviles: **LauncherOptions.DesiredRemainingView no se admite en la familia de dispositivos móviles.
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
}
});
}
Comentarios
La aplicación no puede seleccionar la aplicación que se inicia. El usuario determina qué aplicación se inicia. El usuario puede seleccionar una aplicación de Plataforma universal de Windows (UWP) o una aplicación de escritorio de Windows.
Al iniciar un archivo, la aplicación debe ser la aplicación en primer plano, es decir, debe ser visible para el usuario. Este requisito ayuda a garantizar que el usuario mantienen el control. Para cumplir este requisito, asegúrese de vincular todos los inicios de archivo directamente a la interfaz de usuario de la aplicación. Lo más probable es que el usuario siempre realice alguna acción para iniciar un inicio de archivo.
No puede iniciar tipos de archivo que contengan código o script si el sistema operativo los ejecuta automáticamente, como, por ejemplo, .exe, .msi y .js archivos. Esta restricción protege a los usuarios de archivos potencialmente malintencionados que podrían modificar el sistema operativo. Puede usar este método para iniciar tipos de archivo que pueden contener script si una aplicación que aísla el script, como .docx archivos. Las aplicaciones como Microsoft Word mantienen el script en .docx archivos para modificar el sistema operativo.
Si intenta iniciar un tipo de archivo restringido, se producirá un error en el inicio y se invocará la devolución de llamada de error. Si la aplicación controla muchos tipos diferentes de archivos y espera que se produzca este error, se recomienda proporcionar una experiencia de reserva al usuario. Por ejemplo, podría dar al usuario una opción para guardar el archivo en el escritorio y podría abrirlo allí.