Autor
|
Tema: [AYUDA] Borrar archivo en uso (Leído 7,141 veces)
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
Hola a todos, estoy tratando de lograr borrar un archivo en uso, alguno tiene idea de como poder lograrlo?
En realidad quiero lograr algo parecido a lo que hace el programa Unlocker, que desbloquea el archivo sin tener que cerrar la aplicación que lo está usando y lo mejor es que desde la otra aplicación el archivo se sigue visualizando.
Ej: un excel o un doc
|
|
|
En línea
|
Can you see it? The worst is over The monsters in my head are scared of love Fallen people listen up! It’s never too late to change our luck So, don’t let them steal your light Don’t let them break your stride There is light on the other side And you’ll see all the raindrops falling behind Make it out tonight it’s a revolution
CL!!!
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Una forma de cerrar el HANDLE es usando DuplicateHandle con DUPLICATE_CLOSE_SOURCE.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Unlocker utiliza ambos y un driver o hacer lo que dijo EI.
|
|
|
En línea
|
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
Abrí el archivo WORD.xls Usé el unlocker para ver el pid más el handle, que eran 8300 y 924 Ejecuté este código int main() { DWORD source_pid; HANDLE oldhandle; bool success; source_pid = 8300; oldhandle = (HANDLE)924; LPCSTR Path = "C:\\WORD.xls"; HANDLE source_handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, source_pid); HANDLE newhandle; success = DuplicateHandle(source_handle, (HANDLE)oldhandle, GetCurrentProcess(), &newhandle, DUPLICATE_SAME_ACCESS, FALSE, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS); success = DeleteFile(Path); CloseHandle(source_handle); success = DeleteFile(Path); CloseHandle(newhandle); success = DeleteFile(Path); return 0; }
Luego de ejecutar este código, usé el unlocker de nuevo, ahora me mostraba "No locking handle found" pero no puedo eliminar el archivo... Alguno tiene idea?
|
|
|
En línea
|
Can you see it? The worst is over The monsters in my head are scared of love Fallen people listen up! It’s never too late to change our luck So, don’t let them steal your light Don’t let them break your stride There is light on the other side And you’ll see all the raindrops falling behind Make it out tonight it’s a revolution
CL!!!
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Fijate que devuelve GetLastError para empezar.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
DuplicateHandle retorna true los DeleteFile retornan false
|
|
|
En línea
|
Can you see it? The worst is over The monsters in my head are scared of love Fallen people listen up! It’s never too late to change our luck So, don’t let them steal your light Don’t let them break your stride There is light on the other side And you’ll see all the raindrops falling behind Make it out tonight it’s a revolution
CL!!!
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Si, llama a GetLastError despues de DeleteFile y fijate que valor devuelve esa funcion.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
Si, llama a GetLastError despues de DeleteFile y fijate que valor devuelve esa funcion. Devolvió el número 32. Lo busqué y es ésto: ERROR_SHARING_VIOLATION 32 (0x20) The process cannot access the file because it is being used by another process. Luego me dá el número 5. ERROR_ACCESS_DENIED 5 (0x5) Access is denied.
|
|
« Última modificación: 14 Abril 2014, 22:38 pm por Miseryk »
|
En línea
|
Can you see it? The worst is over The monsters in my head are scared of love Fallen people listen up! It’s never too late to change our luck So, don’t let them steal your light Don’t let them break your stride There is light on the other side And you’ll see all the raindrops falling behind Make it out tonight it’s a revolution
CL!!!
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
El ERROR_SHARING_VIOLATION primero tiene sentido, intenta borrar el archivo todavia teniendo el HANDLE en tu programa y el ERROR_ACCESS_DENIED es por no tener los permisos necesarios. ¿Una vez que cerras el HANDLE con tu programa y este termina podes borrar el archivo con el Explorador de Windows?
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Miseryk
Desconectado
Mensajes: 225
SI.NU.SA U.GU.DE (2NE1 - D-Unit)
|
El ERROR_SHARING_VIOLATION primero tiene sentido, intenta borrar el archivo todavia teniendo el HANDLE en tu programa y el ERROR_ACCESS_DENIED es por no tener los permisos necesarios. ¿Una vez que cerras el HANDLE con tu programa y este termina podes borrar el archivo con el Explorador de Windows?
Una vez cerrado el handle no lo puedo borrar desde Windows, inclusive con el Unlocker, porque me muestra en AMBOS que el archivo ya no tiene un handle abierto, pero no se puede eliminar a mano, y para eliminarlo tengo que usar el unlocker con la accion delete, asumo que ahí se usa el driver del unlocker, ya que ambos pueden cerrar el handle y no se puede eliminar a mano. (programación o windows)
|
|
|
En línea
|
Can you see it? The worst is over The monsters in my head are scared of love Fallen people listen up! It’s never too late to change our luck So, don’t let them steal your light Don’t let them break your stride There is light on the other side And you’ll see all the raindrops falling behind Make it out tonight it’s a revolution
CL!!!
|
|
|
|
|