Es muy probable que este solucionado pero quizas te sirva mejor que el otro metodo. No lo pude hacer fallar por el momento
Estaba haciendo un programa para que ejecute cualquier cosa: Accesos directos, .bat, .msu(actualizaciones del seven) etc. etc .
y que espere que finalice el programa para continuar. Al final lo pude resolver
Buscando desesperado encontre este post; no es lo que buscaba pero lo tome como un desafio.
En base a lo que tenia lo modifique y lo adapte a la Variante#1
Salio esto y funciona tambien aunque el word este abierto lo borra sin problemas
(el archivo que queremos abrir tiene que estar cerrado )
Bueno vamos con el codigo
Agregar al form:
un Command1 y un Text1(en este va la ruta completa de lo que se quiere abrir y borrar)
Código:
Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" _
(ByVal lpszLongPath As String, ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long
Private Sub Command1_Click()
Comando = Text1
ejecutar (Comando)
End Sub
Private Sub Form_Load()
Form1.ScaleMode = vbCharacters
Command1.Caption = "Ejecutar y borrar al cerrar"
Command1.Width = Len(Command1.Caption)
End Sub
Sub ejecutar(Comando As String)
Dim hShell As Long, hProc As Long, codExit As Long, i As Long
Dim sBuf As String * 280
Dim archivo, elbat
'convierte a ruta a nombre corto
i = GetShortPathName(Comando, sBuf, Len(sBuf))
Comando = Left$(sBuf, i) 'ponemos en Comando el nomb corto
If Comando = "" Then Exit Sub
archivo = Right(Comando, Len(Comando) - InStrRev(Comando, "\"))
elbat = creatxt(Comando)
hShell = Shell(Environ$("Comspec") & " /c " & elbat, vbHide)
End Sub
Function creatxt(archivo As String)
Dim arch
Dim NumArch
Randomize
arch = Int(10000 * Rnd) + 1 & ".bat"
ChDir Environ$("temp")
NumArch = freefile
Open arch For Output As NumArch
Print #NumArch, "echo off"
Print #NumArch, "Cls"
Print #NumArch, "start " & archivo
Print #NumArch, ":comienzo"
Print #NumArch, "IF EXIST " & archivo & " (del " & archivo & ") else goto fin"
Print #NumArch, "ping localhost -n 3 >nul"
Print #NumArch, "goto comienzo"
Print #NumArch, ":fin"
Print #NumArch, "del %0"
Close #NumArch
creatxt = arch
End Function
Lo que hace esto es crear un bat en la carpeta temp.
Este bat queda haciendo un bucle para tratar de borrar el archivo que acaba de abrir,
como le da error sigue intentando eliminarlo.
Cuando se cierra la aplicacion que lo utiliza ej el word lo logra eliminar y se borra así mismo
usa el comando ping como temporizador
Saludos