Foros del Web » Programando para Internet » ASP Clásico »

ejecutar aplicaciones

Estas en el tema de ejecutar aplicaciones en el foro de ASP Clásico en Foros del Web. Saludos a todos/as Estoy intentado ejecutar aplicaciones en mi servidor desde una web construida en asp,estoy haciendo pruebas sobre Xp y IIS 5.0. Para conseguir ...
  #1 (permalink)  
Antiguo 30/03/2005, 09:23
 
Fecha de Ingreso: enero-2004
Ubicación: Granada
Mensajes: 185
Antigüedad: 21 años, 3 meses
Puntos: 0
ejecutar aplicaciones

Saludos a todos/as
Estoy intentado ejecutar aplicaciones en mi servidor desde una web construida en asp,estoy haciendo pruebas sobre Xp y IIS 5.0. Para conseguir mi objetivo estoy intentando hacer lo siguiente

dim obj
set obj=server.CreateObject("wscript.shell")
obj.run "c:\inetpub\wwwroot\pruebas\prueba.bat"
set obj=nothing

pero me da el siguiente error

Error de Microsoft VBScript en tiempo de ejecución (0x800A0046)
Permiso denegado

He dado todos los permisos sobre el fichero prueba.bat y sobre el directorio pruebas, pero nada. He intentado hacer lo mismo pero ejecutando un .exe y con estos si funciona, el problema solo lo tengo con los ficheros .bat.

Otra duda, porque cuando esto

dim obj
set obj=server.CreateObject("wscript.shell")
obj.run "ping 192.168.x.x >c:\inetpub\wwwroot\pruebas\prueba.txt"
set obj=nothing

no me redirecciona la salida del comando ping al fichero que le indico.

Si alguien me puede echar una mano le estaría agradecido,gracias
  #2 (permalink)  
Antiguo 30/03/2005, 11:48
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 23 años, 4 meses
Puntos: 2
Mirá, me parece que eso le deberías dar permisos de ejecución de líneas de comandos en el IIS.
Más allá de eso... creo (estoy casi seguro) que ese tipo de cosas lo tenés que ejcutar en tu servidor, o sea.. en un hosting no creo que te permitan hacer ese tipo de cosas.
Yo lo haría con una DLL hecha en Visual Basic y consumis la clase y los métodos desde ahí.

La historia es en la parte general ponés este código.

Código:
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Type STARTUPINFO
    cb As Long
    lpReserved As String
    lpDesktop As String
    lpTitle As String
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Long
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type

Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadID As Long
End Type

Después hacés esta función

Código:
Public Function EjecutarBatch(Fichero As String) As Integer
    Dim Valor As Long
    Dim Comienzo As STARTUPINFO
    Dim Proceso As PROCESS_INFORMATION
    EjecutarBatch = 0
    Comienzo.cb = Len(Comienzo)
    Valor = CreateProcessA(0&, Fichero$, 0&, 0&, 1&, &H20&, 0&, 0&, Comienzo, Proceso)
    Valor = WaitForSingleObject(Proceso.hProcess, -1&)
    If Valor = -1 Then
        EjecutarBatch = 1
    Else
        Valor = CloseHandle(Proceso.hProcess)
    End If
End Function

Para probarlo desde el Visual lo llamás:

Código:
call EjecutarBatch("C:\pp.bat")

Lo que tenés que hacer es registrar el componente... tanto por COM o COM+ y después llamás a la función que hiciste

Código:
call Objeto.EjecutarBatch("C:\aa.bat")


Espero haber sido de ayuda.

SALUDOS!
__________________
La Perfección es enemigo de lo bueno.
  #3 (permalink)  
Antiguo 31/03/2005, 07:55
 
Fecha de Ingreso: enero-2004
Ubicación: Granada
Mensajes: 185
Antigüedad: 21 años, 3 meses
Puntos: 0
Ya he creado la dll la he llamado xxx.dll, pero lo que no me queda muy claro es la parte final, la de registrar el componente y luego utilizarlo en la página web.Si eres tan amable de explicarme como tengo que seguir estos pasos. Gracias
  #4 (permalink)  
Antiguo 31/03/2005, 08:09
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 23 años, 4 meses
Puntos: 2
Para registrarla en COM+ tenés que ir a Inicio / Panel de Control / Herramientas Administrativas / Servicios de Componentes.

Una vez ahí tenés que desplegar Servicio de Componentes / Equopos / Mi PC y posicionarte dentro de Aplicaciones COM+
Luego botón derecho / Nuevo / Aplicacion
En el popup que se te abra elegí Crear Aplicacion Vacia y poné un nombre que quieras vos... y darle siguiente hasta terminar

Una vez que hiciste eso tenés que desplegar el paquete y posicionarte sobre la carpeta Componentes Botón Derecho / Nuevo / Componente y elegir la opción Instalar Nuevos Componentes, después tenés que elegir la DLL que vos precises y listo...

Bueno.. cualquier cosita me encuentro a disposición y espero haber sido de ayuda, si no lo fui pido mil disculpas
__________________
La Perfección es enemigo de lo bueno.
  #5 (permalink)  
Antiguo 31/03/2005, 08:52
 
Fecha de Ingreso: enero-2004
Ubicación: Granada
Mensajes: 185
Antigüedad: 21 años, 3 meses
Puntos: 0
He hecho lo siguiente para ir probando.

he creado una dll con el siguiente codigo

Function Multi(X As Variant, Y As Variant) As Variant
Multi = X * Y
End Function

la he guardado con el nombre SimpleCompo.dll y la clase la he guardado como Multiplica, he registrado como tu me has dicho.Desde la página hago lo siguiente

set objeto=Server.CreateObject("SimpleCompo.Multiplica ")

Y me da el siguiente error

Cadena clase no válida
  #6 (permalink)  
Antiguo 31/03/2005, 09:17
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 23 años, 4 meses
Puntos: 2
Ok.. pero cuando desplegas el paquete que hiciste dentro del COM+ te aparece dentro de la carpeta Componentes SimpleCompo.Multiplica ??

SALUDOS!
__________________
La Perfección es enemigo de lo bueno.
  #7 (permalink)  
Antiguo 31/03/2005, 09:27
 
Fecha de Ingreso: enero-2004
Ubicación: Granada
Mensajes: 185
Antigüedad: 21 años, 3 meses
Puntos: 0
No, me aparece Proyecto1.Class1, pero el nombre que le he dado a la dll es SimpleCompo y a la clase es Multiplica, y el nombre de los ficheros es ese.

He probado con set objeto=Server.CreateObject("Proyecto1.Class1") y funciona
  #8 (permalink)  
Antiguo 31/03/2005, 09:53
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 23 años, 4 meses
Puntos: 2
Claro.. ahí está el tema.. no importa el nombre que le pongas a la DLL lo que importa es el name que le hayas puesto dentro del Visual Basic.

En realidad Multiplica no es una clase, en realidad la clase es Class1, Multiplica es un método (función) dentro de la clase Class1.

Todo loq ue te digo ahora es dentro del Visual Basic.
Para cambiar el nombre del Proyecto, deberás hacer botón derecho sobre Proyecto1 y se te va a desplgar un menú, hacé click en Pryecto1 Propiedades (todo según el idioma en que tengas el VB), bueno, dentro de Proyect Name, ponele el que vos quieras.
DEspués andá a las propiedades de Class1 y en name cambiale el nombre.

UIna vez que hagas esto y lo compiles nuevamente vas a ver que podrás usar el nombre que vos quieras.

Una cosita más... cuando vos haces Server.CreateObject("Proyecto1.Class1")
DEspués para llamar a tu método multiplica debería ser así
call Class.Multiplica(Parametros)


SALUDOS!
__________________
La Perfección es enemigo de lo bueno.
  #9 (permalink)  
Antiguo 31/03/2005, 10:06
 
Fecha de Ingreso: enero-2004
Ubicación: Granada
Mensajes: 185
Antigüedad: 21 años, 3 meses
Puntos: 0
Que tonto soy, ya me había dado cuenta antes de que tu me mandaras el mensaje, pero de todas maneras muchas gracias.Ahora voy realizar la dll que en tu primera respuesta me indicastes a ver si va todo bien, luego te comento como me ha ido.
  #10 (permalink)  
Antiguo 01/04/2005, 01:03
 
Fecha de Ingreso: enero-2004
Ubicación: Granada
Mensajes: 185
Antigüedad: 21 años, 3 meses
Puntos: 0
Saludos de nuevo cbas, he probado el código que me indicastes y funciona perfectamente en mi equipo local con xp y iis 5, pero cuando me lo llevo a mi servidor, windows 2003 con iis 6 me da el siguiente error

Error en la llamada a Server.CreateObject al comprobar permisos. Se ha denegado el acceso a este objeto.

He echo los mismos pasos en un sistema y otro pero nada.
  #11 (permalink)  
Antiguo 01/04/2005, 07:12
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 23 años, 4 meses
Puntos: 2
La verdad que de 2003 nada... pero mirá lo que encontré para que veas que no sos el único :D

http://www.programacion.com/foros/5/msg/184723/


A ver si te sirve esto...
Pregunta: http://listas.rcp.net.pe/pipermail/p...ry/001612.html
Respuesta: http://listas.rcp.net.pe/pipermail/m...ry/002544.html

Yo no descubrí nada, pero el problema que tenés es de configuración del IIS me parece.

La verdad que creo que hasta acá llegué, porque de 2003 no sé nada de configuración y esas cosas :( porque el 2003 nunca lo usé, es más nunca lo instalé ni nada :(

Espero que te sirva lo que te pasé.

SALUDOS!
__________________
La Perfección es enemigo de lo bueno.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:48.