Compartir a través de


Interfaz IFileIsInUse (shobjidl_core.h)

Expone métodos a los que se puede llamar para obtener información sobre o cerrar un archivo que está en uso por otra aplicación. Cuando una aplicación intenta acceder a un archivo y encuentra ese archivo que ya está en uso, puede usar los métodos de esta interfaz para recopilar información para presentar al usuario en un cuadro de diálogo.

Herencia

La interfaz IFileIsInUse hereda de la interfaz IUnknown . IFileIsInUse también tiene estos tipos de miembros:

Métodos

La interfaz IFileIsInUse tiene estos métodos.

 
IFileIsInUse::CloseFile

Cierra el archivo actualmente en uso.
IFileIsInUse::GetAppName

Recupera el nombre de la aplicación que usa el archivo .
IFileIsInUse::GetCapabilities

Determina si el archivo se puede cerrar y si la interfaz de usuario es capaz de cambiar a la ventana de la aplicación que usa el archivo.
IFileIsInUse::GetSwitchToHWND

Recupera el identificador de la ventana de nivel superior de la aplicación que usa el archivo .
IFileIsInUse::GetUsage

Obtiene un valor que indica cómo se usa el archivo en uso.

Comentarios

En versiones de Windows anteriores a Windows Vista, cuando un usuario intentó acceder a un archivo que estaba abierto en otra aplicación, el usuario simplemente recibiría un cuadro de diálogo con un mensaje que indica que el archivo ya estaba abierto. El mensaje indicó que el usuario cierra la otra aplicación, pero no lo identificó. Aparte de esa sugerencia, el cuadro de diálogo no proporcionó ninguna acción de usuario para abordar la situación. Esta interfaz proporciona métodos que pueden dar lugar a un cuadro de diálogo más informativo desde el que el usuario puede realizar acciones directas.

Tabla de objetos en ejecución

Cuando una aplicación abre un archivo, esa aplicación registra el archivo insertando el objeto IFileIsInUse con instancias en la tabla de objetos en ejecución (ROT). Rot es una tabla de búsqueda accesible globalmente que realiza un seguimiento de los objetos que se están ejecutando actualmente. Estos objetos se pueden identificar mediante un moniker. Cuando un cliente intenta enlazar un moniker a un objeto, el moniker comprueba el ROT para determinar si el objeto ya se está ejecutando. Esto permite que el moniker se enlace a la instancia actual en lugar de cargar una nueva instancia.

Realice estos pasos para agregar un archivo a rot:

  1. Llame a la función GetRunningObjectTable para recuperar una instancia de IRunningObjectTable.
  2. Cree un objeto IFileIsInUse para el archivo que está actualmente en uso.
  3. Cree un objeto IMoniker para el archivo que está actualmente en uso.
  4. Inserte los objetos IFileIsInUse e IMoniker en el ROT llamando a IRunningObjectTable::Register.

En la llamada a Register, especifique la marca ROTFLAGS_ALLOWANYCLIENT . Esto permite que la entrada ROT funcione a través de los límites de seguridad. El uso de esta marca requiere que la aplicación que llama tenga un identificador de modelo de usuario de aplicación explícito (AppUserModelID) (System.AppUserModel.ID). Un AppUserModelID explícito permite que el Modelo de objetos componentes (COM) inspeccione la configuración de seguridad de la aplicación. Se producirá un error al intentar llamar a Register con ROTFLAGS_ALLOWANYCLIENT y no se producirá ningún error explícito de AppUserModelID. Puede llamar a Register sin la marca ROTFLAGS_ALLOWANYCLIENT y la aplicación funcionará correctamente, pero solo dentro de su propio nivel de seguridad.

El valor recuperado en el parámetro [out] del método Register se usa para identificar la entrada en llamadas posteriores para recuperarla o quitarla del ROT.

Cuándo implementar

Las aplicaciones que abren tipos de archivo que pueden abrir otras aplicaciones deben implementar IFileIsInUse. La implementación de una aplicación de esta interfaz permite al Explorador de Windows detectar el origen de los errores de uso compartido, lo que permite a los usuarios solucionar y reintentar operaciones que producen errores debido a esos errores.

Cuándo usar

Una aplicación llama a IFileIsInUse para comunicarse con otras aplicaciones para resolver errores de uso compartido. Estos errores se producen en respuesta a la acción del usuario en el sistema de archivos. Por ejemplo, cuando un usuario intenta cambiar el nombre de una carpeta mientras un archivo de esa carpeta está abierto en una aplicación, se produce un error en la operación de cambio de nombre. El Explorador de Windows puede llamar a la implementación de IFileIsInUse de esa aplicación para ayudar al usuario a identificar el conflicto y resolver este problema.

Muestra

Consulte el ejemplo File Is in Use (Archivo está en uso ), que muestra cómo implementar IFileIsInUse y registrar un archivo con rot. A continuación, se muestra cómo personalizar el cuadro de diálogo Archivo en uso para mostrar información adicional y opciones para los archivos abiertos actualmente en una aplicación.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado shobjidl_core.h (include Shobjidl.h)

Consulte también

Identificadores de modelo de usuario de aplicación (AppUserModelID)