RE:Ejecutar aplicaciones externas
En realidad como es una aplicación externa no podés limitarla desde la misma aplicación, y el tiempo debe ser evaluado desde la aplicación que lo lanza.
En este orden de ideas, tendrías que poner un Timer que se ejecute cada minuto, y dependiendo de cuanto tiempo desees que permanezca la aplicación externa, poner un contador dentro de la función Timer que se vaya incrementando . para eso necesitás una variable estática, o bien, una variable Global declarada en un módulo estandar. En cuanto a cerrar un proceso en base a los datos obtenidos desde tu misma aplicación, tendrás que usar las APIS de Windows. Este es un ejemplo simple hecho a medida
Ejemplo:
Private Declare Function TerminateProcess Lib "Kernel32" (ByVal ApphProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "Kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Const PROCESS_QUERY_INFORMATION = &H400
Dim hProcess As Long
'la propiedad Interval del Objeto Timer tiene que ser de 65535 equivalente a un minuto
Private sub Form_Load ()
LaunchApp
End Sub
Private Sub LaunchApp()
'en la variable hProcess se resguarda el número del proceso asignado por Windows
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell("c:\windows\notepad.exe", 1))
End Sub
Private Sub MiLimite_Timer()
'El timer va sumando minutos hasta llegar a la hora
Static lMinutos as Long
'El limite se fija en Una Hora (60 Minutos)
If lMinutos= 60 then
'Rutina para cerrar la aplicación externa
CloseApp
'Vuelve a setetar el Timer a 0
lMinutos=0
else
lMinutos= lMinutos +1
endif
End Sub
Private Sub CloseApp()
Dim exitCode As Long, AppKill as long
' API que termina un Proceso
AppKill = TerminateProcess(hProcess, exitCode)
' Cierra el Handle correspondiente al proceso
Call CloseHandle(hProcess)
End Sub
Cualquier duda dejame un post y lo vemos.
Espero que te sea útil