Saltar al contenido

¿Cómo elimino un archivo que está bloqueado por otro proceso en C#?

Estate atento ya que en este enunciado vas a hallar el hallazgo que buscas.Este enunciado ha sido probado por nuestros especialistas para asegurar la calidad y veracidad de nuestro contenido.

Solución:

Matar otros procesos no es algo saludable. Si su escenario involucra algo como la desinstalación, podría usar el MoveFileEx Función API para marcar el archivo para su eliminación en el próximo reinicio.

Si parece que realmente necesita eliminar un archivo en uso por otro proceso, le recomiendo que reconsidere el problema real antes de considerar cualquier solución.

El método típico es el siguiente. Has dicho que quieres hacer esto en C#, así que aquí va…

  1. Si no sabe qué proceso tiene bloqueado el archivo, deberá examinar la lista de identificadores de cada proceso y consultar cada identificador para determinar si identifica el archivo bloqueado. Hacer esto en C# probablemente requerirá P/Invoke o un C++/CLI intermediario para llamar a las API nativas que necesitará.
  2. Una vez que haya averiguado qué procesos tienen el archivo bloqueado, deberá inyectar de manera segura una pequeña DLL nativa en el proceso (también puede inyectar una DLL administrada, pero esto es más complicado, ya que luego debe comenzar o adjuntar al tiempo de ejecución de .NET).
  3. Esa DLL de arranque luego cierra el identificador usando CloseHandle, etc.

Esencialmente: la forma de desbloquear un archivo “bloqueado” es inyectar un archivo DLL en el espacio de direcciones del proceso infractor y cerrarlo usted mismo. Puede hacer esto usando código nativo o administrado. Pase lo que pase, necesitará una pequeña cantidad de código nativo o al menos P/Invoke en el mismo.

Enlaces Útiles:

  • Tres formas de inyectar su código en otro proceso
  • Inyección de código .NET

¡Buena suerte!

Si quieres hacerlo programáticamente. No estoy seguro… y realmente recomendaría no hacerlo. Si solo está solucionando problemas en su propia máquina, SysInternals Process Explorer puede ayudarlo

Ejecútelo, use el comando Buscar identificador (creo que está en el menú Buscar o Identificador) y busque el nombre de su archivo. Una vez que se encuentran las manijas, puede cerrarlas a la fuerza.

A continuación, puede eliminar el archivo y así sucesivamente.

Tener cuidadohacer esto puede hacer que el programa que posee los identificadores se comporte de manera extraña, ya que acaba de sacar la alfombra proverbial de debajo, pero funciona bien cuando está depurando su propio código erróneo, o cuando Visual Studio/Windows Explorer está estar arruinado y no liberar identificadores de archivos a pesar de que les dijiste que cerraran el archivo hace mucho tiempo … suspiro 🙂

Nos puedes proteger nuestra publicación exponiendo un comentario o dejando una valoración te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *