IFileIsInUse-Schnittstelle (shobjidl_core.h)
Macht Methoden verfügbar, die aufgerufen werden können, um Informationen zu einer Datei abzurufen oder zu schließen, die von einer anderen Anwendung verwendet wird. Wenn eine Anwendung versucht, auf eine Datei zuzugreifen und diese Datei findet, die bereits verwendet wird, kann sie die Methoden dieser Schnittstelle verwenden, um Informationen zu sammeln, die dem Benutzer in einem Dialogfeld präsentiert werden.
Vererbung
Die IFileIsInUse-Schnittstelle erbt von der IUnknown-Schnittstelle . IFileIsInUse verfügt auch über folgende Membertypen:
Methoden
Die IFileIsInUse-Schnittstelle verfügt über diese Methoden.
IFileIsInUse::CloseFile Schließt die derzeit verwendete Datei. |
IFileIsInUse::GetAppName Ruft den Namen der Anwendung ab, die die Datei verwendet. |
IFileIsInUse::GetCapabilities Bestimmt, ob die Datei geschlossen werden kann und ob die Benutzeroberfläche in der Lage ist, zum Fenster der Anwendung zu wechseln, die die Datei verwendet. |
IFileIsInUse::GetSwitchToHWND Ruft das Handle des Fensters der obersten Ebene der Anwendung ab, die die Datei verwendet. |
IFileIsInUse::GetUsage Ruft einen Wert ab, der angibt, wie die verwendete Datei verwendet wird. |
Hinweise
Wenn ein Benutzer in Windows-Versionen vor Windows Vista versuchte, auf eine Datei zuzugreifen, die in einer anderen Anwendung geöffnet war, erhielt der Benutzer einfach ein Dialogfeld mit einer Meldung, dass die Datei bereits geöffnet war. In der Meldung wurde angewiesen, dass der Benutzer die andere Anwendung schließt, sie aber nicht identifiziert hat. Abgesehen von diesem Vorschlag bot das Dialogfeld keine Benutzeraktion, um die Situation zu beheben. Diese Schnittstelle stellt Methoden bereit, die zu einem informativeren Dialogfeld führen können, über das der Benutzer direkte Aktionen ausführen kann.
Tabelle des ausgeführten Objekts
Wenn eine Anwendung eine Datei öffnet, registriert diese Anwendung die Datei, indem sie das instanziierte IFileIsInUse-Objekt in die laufende Objekttabelle (ROT) einfügt. Rot ist eine global zugängliche Nachschlagetabelle, die aktuell ausgeführte Objekte nachverfolgt. Diese Objekte können durch einen Moniker identifiziert werden. Wenn ein Client versucht, einen Moniker an ein Objekt zu binden, überprüft der Moniker den ROT-Wert, um festzustellen, ob das Objekt bereits ausgeführt wird. Dadurch kann der Moniker an den aktuellen instance binden, anstatt eine neue instance zu laden.Führen Sie die folgenden Schritte aus, um der ROT-Datei eine Datei hinzuzufügen:
- Rufen Sie die GetRunningObjectTable-Funktion auf, um eine instance von IRunningObjectTable abzurufen.
- Erstellen Sie ein IFileIsInUse-Objekt für die aktuell verwendete Datei.
- Erstellen Sie ein IMoniker-Objekt für die aktuell verwendete Datei.
- Fügen Sie die Objekte IFileIsInUse und IMoniker in die ROT ein, indem Sie IRunningObjectTable::Register aufrufen.
Geben Sie im Aufruf von Register das Flag ROTFLAGS_ALLOWANYCLIENT an. Dadurch kann der ROT-Eintrag über Sicherheitsgrenzen hinweg funktionieren. Die Verwendung dieses Flags erfordert, dass die aufrufende Anwendung über eine explizite Anwendungsbenutzermodell-ID (AppUserModelID) (System.AppUserModel.ID) verfügt. Eine explizite AppUserModelID ermöglicht es dem Component Object Model (COM), die Sicherheitseinstellungen der Anwendung zu überprüfen. Ein Versuch, Die Registrierung mit ROTFLAGS_ALLOWANYCLIENT und keine explizite AppUserModelID aufzurufen, schlägt fehl. Sie können Registrieren ohne das ROTFLAGS_ALLOWANYCLIENT-Flag aufrufen, und die Anwendung funktioniert ordnungsgemäß, jedoch nur innerhalb der eigenen Sicherheitsstufe.
Der Wert, der im Parameter [out] der Register-Methode abgerufen wird, wird verwendet, um den Eintrag in späteren Aufrufen zu identifizieren, um ihn abzurufen oder aus dem ROT-Wert zu entfernen.
Wann muss implementiert werden?
Anwendungen, die Dateitypen öffnen, die von anderen Anwendungen geöffnet werden können, sollten IFileIsInUse implementieren. Die Implementierung dieser Schnittstelle einer Anwendung ermöglicht es Windows Explorer, die Quelle von Freigabefehlern zu ermitteln, sodass Benutzer Vorgänge behandeln und wiederholen können, die aufgrund dieser Fehler fehlschlagen.Wann sollte verwendet werden?
Eine Anwendung ruft IFileIsInUse auf, um mit anderen Anwendungen zu kommunizieren, um Freigabefehler zu beheben. Diese Fehler treten als Reaktion auf Benutzeraktionen im Dateisystem auf. Wenn ein Benutzer beispielsweise versucht, einen Ordner umzubenennen, während eine Datei in diesem Ordner in einer Anwendung geöffnet ist, schlägt der Umbenennungsvorgang fehl. Windows Explorer kann die Implementierung von IFileIsInUse dieser Anwendung aufrufen, um dem Benutzer zu helfen, den Konflikt zu identifizieren und dieses Problem zu beheben.Beispiel
Sehen Sie sich das Beispiel "Datei ist in Verwendung" an, in dem veranschaulicht wird, wie Sie IFileIsInUse implementieren und eine Datei bei rot registrieren. Anschließend wird gezeigt, wie Sie das Dialogfeld Datei in Verwendung anpassen, um zusätzliche Informationen und Optionen für Dateien anzuzeigen, die derzeit in einer Anwendung geöffnet werden.Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | shobjidl_core.h (einschließlich Shobjidl.h) |