Starten der Standard-App für eine Datei
Erfahren Sie, wie Sie die Standard-App für eine Datei aus Ihrer WinUI, universelle Windows-Plattform (UWP) oder einer anderen Desktop-App 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 Windows-Runtime -API (WinRT) verwenden, um den Standardhandler für eine Datei zu starten, die Ihre App nicht selbst verarbeiten kann.
Wichtige APIs
Die folgenden APIs werden in diesem Thema vorgestellt:
Anmerkung
Sofern nicht anders angegeben, können alle in diesem Thema verwendeten WinRT-APIs sowohl in UWP-Apps, WinUI-Apps als auch in anderen Desktop-Apps verwendet werden. Weitere Informationen zum Aktivieren der Desktop-App für die Arbeit mit WinRT-APIs finden Sie unter Aufrufen von Windows-Runtime-APIs in Desktop-Apps.
Dateiobjekt abrufen
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 das Windows.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 eine 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 auf der Familie mobiler Geräte nicht unterstützt. |
Standardmäßiger Start
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.pngzu 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
}
}
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 festgelegt, 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 AppBar- oder in einem Kontextmenü, damit der Benutzer das Dialogfeld Öffnen mit öffnen 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
}
}
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 spezifische Empfehlung geben möchten, welche App im vorliegenden Szenario verwendet werden sollte, können Sie dies tun, indem Sie diese Empfehlung zusammen mit der Datei, die Sie starten, übergeben. Um dies zu tun, rufen Sie die Methode Windows.System.Launcher.launchFileAsync(IStorageFile, LauncherOptions) auf und setzen Sie LauncherOptions.PreferredApplicationPackageFamilyName auf den Paketfamiliennamen der App im Store, die Sie empfehlen möchten. Legen Sie dann die 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.
Anmerkung
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
}
}
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 Ansicht des verbliebenen Bereichs (nur UWP)
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 anzuzeigen, dass ihr App-Fenster mehr oder weniger des verfügbaren Platzes einnehmen soll. 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.
Anmerkung
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. Wenn Sie DesiredRemainingView-festlegen, ist kein bestimmtes Fensterverhalten für die Quell-App garantiert.
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
}
});
}
Bemerkungen
Ihre App kann die gestartete App nicht auswählen. Der Benutzer bestimmt, welche App gestartet wird. Der Benutzer kann entweder eine UWP-App 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, .msiund .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 verhindern, dass das Skript in .docx-Dateien das Betriebssystem ändert.
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.
Verwandte Inhalte
Windows developer