Starten der Standard-App für eine Datei
Wichtige APIs
Erfahren Sie, wie Sie die Standard-App für eine Datei starten. Viele Apps müssen mit Dateien arbeiten, die sie nicht selbst verarbeiten können. Beispielsweise erhalten E-Mail-Apps eine Vielzahl von Dateitypen und benötigen eine Möglichkeit, diese Dateien in ihren Standardhandlern zu starten. Diese Schritte zeigen, wie Sie die Windows.System.Launcher-API verwenden, um den Standardhandler für eine Datei zu starten, die Ihre App nicht selbst verarbeiten kann.
Abrufen des Dateiobjekts
Rufen Sie zunächst ein Windows.Storage.StorageFile-Objekt für die Datei ab.
Wenn die Datei im Paket für Ihre App enthalten ist, können Sie die Package.InstalledLocation-Eigenschaft verwenden, um ein Windows.Storage.StorageFolder-Objekt und die Windows.Storage.StorageFolder.GetFileAsync-Methode abzurufen, um das StorageFile-Objekt abzurufen.
Wenn sich die Datei in einem bekannten Ordner befindet, können Sie die Eigenschaften der Windows.Storage.KnownFolders-Klasse verwenden, um einen StorageFolder und die GetFileAsync-Methode abzurufen, um das StorageFile-Objekt abzurufen.
Starten der Datei
Windows bietet verschiedene Optionen zum Starten des Standardhandlers für eine Datei. Diese Optionen werden in diesem Diagramm und in den folgenden Abschnitten beschrieben.
Option | Methode | Beschreibung |
---|---|---|
Standardstart | LaunchFileAsync(IStorageFile) | Starten Sie die angegebene Datei mit dem Standardhandler. |
Öffnen mit Start | LaunchFileAsync(IStorageFile, LauncherOptions) | Starten Sie die angegebene Datei, mit der der Benutzer den Handler über das Dialogfeld "Öffnen mit" auswählen kann. |
Starten mit einem empfohlenen App-Fallback | LaunchFileAsync(IStorageFile, LauncherOptions) | Starten Sie die angegebene Datei mit dem Standardhandler. Wenn kein Handler auf dem System installiert ist, empfehlen Sie dem Benutzer eine App im Store. |
Starten mit einer gewünschten verbleibenden Ansicht | LaunchFileAsync(IStorageFile, LauncherOptions) (nur Windows) | Starten Sie die angegebene Datei mit dem Standardhandler. Geben Sie eine Einstellung an, um nach dem Start auf dem Bildschirm zu bleiben, und fordern Sie eine bestimmte Fenstergröße an. LauncherOptions.DesiredRemainingView wird für die Mobilgerätefamilie nicht unterstützt. |
Standardstart
Rufen Sie die Windows.System.Launcher.LaunchFileAsync(IStorageFile) -Methode auf, um die Standard-App zu starten. In diesem Beispiel wird die Windows.Storage.StorageFolder.GetFileAsync-Methode verwendet, um eine Bilddatei test.png zu starten, die im App-Paket enthalten ist.
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
}
});
}
Öffnen mit Start
Rufen Sie die Windows.System.Launcher.LaunchFileAsync(IStorageFile, LauncherOptions)-Methode mit LauncherOptions.DisplayApplicationPicker auf "true" auf", um die App zu starten, die der Benutzer im Dialogfeld "Öffnen mit" auswählt.
Es wird empfohlen, das Dialogfeld "Öffnen mit " zu verwenden, wenn der Benutzer möglicherweise eine andere App als die Standardeinstellung für eine bestimmte Datei auswählen möchte. Wenn Ihre App beispielsweise dem Benutzer das Starten einer Bilddatei zulässt, ist der Standardhandler wahrscheinlich eine Viewer-App. In einigen Fällen möchte der Benutzer das Bild möglicherweise bearbeiten, anstatt es anzuzeigen. Verwenden Sie die Option "Öffnen mit " zusammen mit einem alternativen Befehl in der App-Leiste oder in einem Kontextmenü, damit der Benutzer das Dialogfeld "Öffnen mit " aufrufen und die Editor-App in diesen Szenarien auswählen kann.
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
}
});
}
Starten mit einem empfohlenen App-Fallback
In einigen Fällen ist dem Benutzer möglicherweise keine App installiert, um die Datei zu verarbeiten, die Sie starten. Standardmäßig behandelt Windows diese Fälle, indem dem Benutzer ein Link zum Suchen nach einer geeigneten App im Store bereitgestellt wird. Wenn Sie dem Benutzer eine bestimmte Empfehlung geben möchten, für welche App sie in diesem Szenario erwerben soll, können Sie dies tun, indem Sie diese Empfehlung zusammen mit der Datei übergeben, die Sie starten. Rufen Sie dazu die Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions)-Methode mit LauncherOptions.PreferredApplicationPackageFamilyName auf den Paketfamiliennamen der App im Store auf, die Sie empfehlen möchten. Legen Sie dann den LauncherOptions.PreferredApplicationDisplayName auf den Namen dieser App fest. Windows verwendet diese Informationen, um die allgemeine Option zum Suchen nach einer App im Store durch eine bestimmte Option zum Erwerb der empfohlenen App aus dem Store zu ersetzen.
Hinweis
Sie müssen beide Optionen festlegen, um eine App zu empfehlen. Das Festlegen eines ohne den anderen führt zu einem Fehler.
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
}
});
}
Starten mit einer gewünschten verbleibenden Ansicht (nur Windows)
Quell-Apps, die LaunchFileAsync aufrufen, können anfordern, dass sie nach dem Starten einer Datei auf dem Bildschirm verbleiben. Standardmäßig versucht Windows, den gesamten verfügbaren Speicherplatz gleichmäßig zwischen der Quell-App und der Ziel-App freizugeben, die die Datei behandelt. Quell-Apps können die DesiredRemainingView-Eigenschaft verwenden, um dem Betriebssystem anzugeben, dass sie das App-Fenster bevorzugen, um mehr oder weniger verfügbaren Speicherplatz zu belegen. DesiredRemainingView kann auch verwendet werden, um anzugeben, dass die Quell-App nach dem Start der Datei nicht auf dem Bildschirm bleiben muss und vollständig durch die Ziel-App ersetzt werden kann. Diese Eigenschaft gibt nur die bevorzugte Fenstergröße der aufrufenden App an. Es gibt nicht das Verhalten anderer Apps an, die gleichzeitig auch auf dem Bildschirm angezeigt werden können.
Hinweis
Windows berücksichtigt mehrere unterschiedliche Faktoren, wenn die endgültige Fenstergröße der Quell-App bestimmt wird, z. B. die Einstellung der Quell-App, die Anzahl der Apps auf dem Bildschirm, die Bildschirmausrichtung usw. Durch Festlegen von DesiredRemainingView wird kein bestimmtes Fensterverhalten für die Quell-App garantiert.
**Mobilgerätefamilie: **LauncherOptions.DesiredRemainingView wird auf der Mobilgerätefamilie nicht unterstützt.
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
}
});
}
Hinweise
Ihre App kann die gestartete App nicht auswählen. Der Benutzer bestimmt, welche App gestartet wird. Der Benutzer kann entweder eine Universelle Windows-Plattform -App (UWP) oder eine Windows-Desktop-App auswählen.
Beim Starten einer Datei muss ihre App die Vordergrund-App sein, d. h. sie muss für den Benutzer sichtbar sein. Diese Anforderung trägt dazu bei, dass der Benutzer die Kontrolle behält. Um diese Anforderung zu erfüllen, stellen Sie sicher, dass Sie alle Dateistarts direkt mit der Benutzeroberfläche Ihrer App verknüpfen. Höchstwahrscheinlich muss der Benutzer immer eine Aktion ausführen, um einen Dateistart zu initiieren.
Dateitypen, die Code oder Skript enthalten, können nicht gestartet werden, wenn sie vom Betriebssystem automatisch ausgeführt werden, z. B. .exe, .msi und .js Dateien. Diese Einschränkung schützt Benutzer vor potenziell schädlichen Dateien, die das Betriebssystem ändern könnten. Mit dieser Methode können Sie Dateitypen starten, die Skripts enthalten können, wenn sie von einer App ausgeführt werden, die das Skript isoliert, z. B. .docx Dateien. Apps wie Microsoft Word behalten das Skript in .docx Dateien vor, das Betriebssystem zu ändern.
Wenn Sie versuchen, einen eingeschränkten Dateityp zu starten, schlägt der Start fehl, und ihr Fehlerrückruf wird aufgerufen. Wenn Ihre App viele verschiedene Dateitypen verarbeitet und sie erwarten, dass dieser Fehler auftritt, empfehlen wir, dem Benutzer eine Fallbackerfahrung bereitzustellen. Sie können dem Benutzer beispielsweise die Möglichkeit geben, die Datei auf dem Desktop zu speichern, und sie könnten sie dort öffnen.