Поделиться через


Интерфейс IFileIsInUse (shobjidl_core.h)

Предоставляет методы, которые можно вызывать для получения или закрытия файла, используемого другим приложением. Когда приложение пытается получить доступ к файлу и обнаруживает, что файл уже используется, оно может использовать методы этого интерфейса для сбора сведений для представления пользователю в диалоговом окне.

Наследование

Интерфейс IFileIsInUse наследуется от интерфейса IUnknown . IFileIsInUse также имеет следующие типы элементов:

Методы

Интерфейс IFileIsInUse содержит следующие методы.

 
IFileIsInUse::CloseFile

Закрывает файл, используемый в данный момент.
IFileIsInUse::GetAppName

Извлекает имя приложения, использующее файл .
IFileIsInUse::GetCapabilities

Определяет, можно ли закрыть файл и способен ли пользовательский интерфейс переключаться в окно приложения, использующее файл.
IFileIsInUse::GetSwitchToHWND

Извлекает дескриптор окна верхнего уровня приложения, использующее файл .
IFileIsInUse::GetUsage

Возвращает значение, указывающее, как используется используемый файл.

Комментарии

В версиях Windows до Windows Vista, когда пользователь пытался получить доступ к файлу, открытому в другом приложении, пользователь просто получает диалоговое окно с сообщением о том, что файл уже открыт. В сообщении указано, что пользователь закрыл другое приложение, но не идентифицировал его. Помимо этого предложения, диалоговое окно не предоставило никаких действий пользователя для решения этой ситуации. Этот интерфейс предоставляет методы, которые могут привести к более информативным диалоговым окнам, из которых пользователь может выполнять прямые действия.

Таблица выполняющихся объектов

Когда приложение открывает файл, это приложение регистрирует файл, вставляя экземпляр объекта IFileIsInUse в таблицу выполняющихся объектов (ROT). ROT — это глобально доступная таблица подстановки, которая отслеживает текущие выполняющиеся объекты. Эти объекты можно определить с помощью моникера. Когда клиент пытается привязать моникер к объекту, моникер проверяет ROT, чтобы определить, запущен ли объект. Это позволяет моникеру выполнять привязку к текущему экземпляру, а не загружать новый экземпляр.

Чтобы добавить файл в ROT, выполните следующие действия:

  1. Вызовите функцию GetRunningObjectTable , чтобы получить экземпляр IRunningObjectTable.
  2. Создайте объект IFileIsInUse для файла, который используется в данный момент.
  3. Создайте объект IMoniker для файла, который используется в данный момент.
  4. Вставьте объекты IFileIsInUse и IMoniker в ROT, вызвав метод IRunningObjectTable::Register.

В вызове Register укажите флаг ROTFLAGS_ALLOWANYCLIENT . Это позволяет записи ROT работать через границы безопасности. Использование этого флага требует, чтобы вызывающее приложение было явно задано идентификатор модели пользователя приложения (AppUserModelID) (System.AppUserModel.ID). Явный идентификатор AppUserModelID позволяет компонентной объектной модели (COM) проверять параметры безопасности приложения. Попытка вызова метода Register с помощью ROTFLAGS_ALLOWANYCLIENT без явного идентификатора AppUserModelID завершится ошибкой. Вы можете вызвать register без флага ROTFLAGS_ALLOWANYCLIENT, и приложение будет работать правильно, но только в пределах собственного уровня безопасности.

Значение, полученное в параметре [out] метода Register , используется для идентификации записи в последующих вызовах, чтобы получить или удалить ее из ROT.

Когда следует реализовать

Приложения, которые открывают типы файлов, которые могут быть открыты другими приложениями, должны реализовывать IFileIsInUse. Реализация этого интерфейса приложения позволяет windows Обозреватель обнаруживать источник ошибок общего доступа, что позволяет пользователям устранять и повторять операции, которые завершаются сбоем из-за этих ошибок.

Когда следует использовать

Приложение вызывает IFileIsInUse для взаимодействия с другими приложениями для устранения ошибок общего доступа. Эти ошибки возникают в ответ на действия пользователя в файловой системе. Например, когда пользователь пытается переименовать папку, когда файл в этой папке открыт в приложении, операция переименования завершается сбоем. Windows Обозреватель может вызывать реализацию IFileIsInUse этого приложения, чтобы помочь пользователю определить конфликт и устранить эту проблему.

Образец

См. пример использования файла , в котором показано, как реализовать IFileIsInUse и зарегистрировать файл с помощью ROT. Затем в нем показано, как настроить диалоговое окно "Файл в использовании " для отображения дополнительных сведений и параметров для файлов, открытых в настоящее время в приложении.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header shobjidl_core.h (включая Shobjidl.h)

См. также раздел

Идентификаторы модели пользователя приложения (Идентификаторы AppUserModelID)