Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: nhaalclkiemr en 2 Enero 2008, 03:58 am



Título: Hacer correr tarea programada ya establecida
Publicado por: nhaalclkiemr en 2 Enero 2008, 03:58 am
Hola, pues bien yo uso la API NetScheduleJobAdd para crear nuevas tareas programadas...las tareas programadas las uso para ascender a SYSTEM y para no depender del comando AT prefiero usar la API...aunke viene siendo lo mismo  :xD

Pues bien, lo malo es que tengo que poner el siguiente minuto para que se ejecute la tarea...y un minuto es mucho :xD ...y weno yo se que se va a crear una tarea con el nombre "AtX"....ya que aunke sea con la API se crean con el nombre como si fuera AT...además el valor de "X"  yo lo se...y con un schtasks /run at1 si X=1...de esa manera no tengo que esperar al minuto siguiente...

lo malo es que ya dependo de "schtasks"...y además este comando en "Home Edition" no se encuentra presente...pues weno lo que quiero es basicamente saber de una API o alguna manera que no sea dependiendo de otro programa o de un comando para hacer correr la tarea y no tener que esperar 1 minuto...

La solucion alternativa que se me ocurre es cambiar la hora del sistema a un segundo antes del minuto siguiente, hacer un Sleep de 2 segundos por ejemplo (para  dar tiempo a que se ejecute la tarea) y después volver a establecer la hora correcta (sumada 2 segundos claro)...pero esto no me parece lo mas profesional (aunke será lo que haga si no encuentro otra solucion)...

Weno a ver si alguien sabe de alguna API...algun objeto o algo para correr una tarea programada ya establecida...

Saludos ;)


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: nhaalclkiemr en 5 Enero 2008, 18:04 pm
Al final pienso que encontré el método...pero no sé como implementarlo...a ver si alguien al ver la info me dice como puedo hacerlo:

http://msdn2.microsoft.com/en-us/library/aa381274(VS.85).aspx (http://msdn2.microsoft.com/en-us/library/aa381274(VS.85).aspx)

Saludos ;)


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: Ferсhu en 9 Enero 2008, 23:23 pm
creo q no hay una api q ejecute la  tarea...asi tipo run...

Lo q podes hacer es cuando keres ejecutar la tarea....tipo como el botoncito podes hacer esto. usar NetScheduleJobGetInfo obtener el commando de la tarea y ejecutar la accion o el programa.

Saludos!!


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: nhaalclkiemr en 10 Enero 2008, 14:59 pm
API miré todas las del mstask.dll y no tiene...yo pienso que tiene que estar dentro del schedsvc.dll ya que es la dll del servicio de tareas programadas...mire sus APIs pero nada...

Y lo que me dices tu no me sirve...pork en realidad es para ejecutar una tarea que creo yo para que se ejecute como SYSTEM...y weno la creo para el siguente minuto pero un minuto para mi es mucho esperar...

Ya puse arriva la alternativa que se me ocurre que es cambiar la hora del ordenador y después de ejecutar la tarea volver otra vez a la hora original...pero ademas que es poco profesional sigo teniendo que esperar 2 segundos...mucho para mi... :xD

Y weno estuve mirando el link k puse arriba (este (http://msdn2.microsoft.com/en-us/library/aa381274(VS.85).aspx)) pero es una interfaz para C y pienso que en VB6.0 que no se puede (en .net si se puede)

Estoy harto de buscar...miré por el registro, un tal JobObject, mire la extension .job, el servicio...un monton de cosas mas pero no consigo nada dios me vuelvo loco... :rolleyes:

Pues nada a ver si alguien sabe y mientres tanto sigo a buscar...gracias de todas maneras ;)

Saludos ;)


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: Tughack en 10 Enero 2008, 15:11 pm
jaja tu y las tareas programadas xD

K kieres hacer exacamente? oO

Salu2


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: nhaalclkiemr en 10 Enero 2008, 15:22 pm
Jeje si la verdad es que estoy llevando un trabajito jeje :xD

A ver...quiero ejecutar mi aplicacion como SYSTEM...y para eso solo se me ocurren tres maneras:

Una es poniendolo en unas claves del registro para que se inicie la proxima vez que se inicie Windows (el método Scripting)...pero tener que esperar a que reinicie es mucho tiempo...

El otro es corriendolo como un servicio...weno tendría que crear un servicio, ejecutar mi programa, correrlo y por ultimo eliminar el servicio...pero además de que es algo mas trabajoso hay varios inconvenientes como que el servicio no se mantiene más de unos segundos si no responde (y no se responder a un servicio desde VB)...entonces tendría que volver iniciarse a si mismo (otra vez) pork si no a los pocos segundos puff...y weno al fin y al cabo es mucho mas facil con las tareas programadas...

El ultimo método es programar una tarea programada con la cuenta AT...que se ejecutará como SYSTEM...lo malo es eso, que para correrla tengo que esperar al siguiente minuto...y weno aunke puedo usar "schtasks" no sirve para Home Edition...

Y weno pues eso eso lo que quiero...ejecutar mi aplicación como SYSTEM al momento...y solo me falta eso ultimo que es correr la tarea sin tener que esperar un minuto y sin depender de "schtasks"...

Weno a ver si me podeis ayudar...y dejo ya esto de las tareas programadas de lado jeje... :xD

Saludos ;)


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: Tughack en 10 Enero 2008, 15:48 pm
Hmm, bueno es algo k nunca he echo y me parece interesante. Voy a ver k puedo hacer y se lo logro te digo algo.

Salu2


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: Ferсhu en 10 Enero 2008, 15:53 pm
si no keres esperar ni un segundo podes hacer esto:

1) listas las tareas con NetScheduleJobEnum.
2) Obtenes la info de esa tarea con NetScheduleJobGetInfo.
3) en el puntero al buffer de estructura AT_INFO esta el comando o lo q ejecuta esa tarea, solo tenes q ejecutarlo.

Eso soluciona lo q pedias pero no va a dejar tu aplicacion como system.

Citar
Y weno pues eso eso lo que quiero...ejecutar mi aplicación como SYSTEM al momento...y solo me falta eso ultimo que es correr la tarea sin tener que esperar un minuto y sin depender de "schtasks"...

Podes injectar un proceso remoto o una dll en algun proceso q ya sea system y q no crashee,  y lanzar la aplicacion q kieras desde ahi. Esto me parece mas facil q todo esoo q kerias hacer jajaj.

Saludos!!


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: Tughack en 10 Enero 2008, 15:58 pm
Citar
Podes injectar un proceso remoto o una dll en algun proceso q ya sea system y q no crashee

Hmm dudo k alguno no crashee...

Acerca de los servicios, aun no lo he probado, pero aver se esto ayuda:

http://www.freevbcode.com/ShowCode.asp?ID=4317

salu2


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: nhaalclkiemr en 10 Enero 2008, 18:13 pm
Primero gracias...y weno vamos por partes (como dijo mi amigo jack :xD):

Haber <~>FeRcHu<~> lo que quiero es ejecutar una aplicación como SYSTEM...las tareas programadas son un método...no me sirve cojer la ruta del proceso de la tarea programada pork entonces no correrá como SYSTEM...y ademas no tiene lógica crear una tarea programada para despues cojerle la ruta que le puse antes :xD

Y weno lo de inyectar lo malo es que seguramente alguno crashe...además que yo sepa no se pueden inyectar programas hechos en VB verdad?? o al menos yo no lo he conseguido...en C si pero en VB no lo creo...

Y weno lo de los servicios gracias miraré a ver si me sirve ;) ... aún asi la idea de los servicios no me gusta mucho...prefiro lo de las tareas programadas pero weno a lo mejor me sirve...además si es para ejecutar un programa hecho en VB como un servicio me sirve de perlas para otras cosas ;D

Weno a ver si consigo algo mas...aun sigo "Searchig..." jeje

Gracias...y saludos ;)


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: Ferсhu en 10 Enero 2008, 18:36 pm
Si me di cuenta dsp de q lo dijiste q eso era el medio para el fin jaja, pero buen keria ayudarte con esa parte.

Ahora aver, si keres q corra como system, o lo metes x el registro en alguna parte donde cargue procesos, cosa q debe ser dificil encontrar.

o te creas/conseguis, un codigo de algun servicio q te lanze tu archivo asi hereda el privilegio system.

Ojo, no digo q crees tu programa como servicio, sino solo conseguir algun codigo de un servicio q ejecute aplicaciones y solo le cambias la ruta hacia tu programa y listo.

Sigo pensando q lo mejor es injectar o crear proceso remoto, si bien recuerdo si lo haces "bien" no crashea.

Ahora, todas las posibilidades q se me ocurren, estan mui lejos de Vb, si bien tu prog seguro q esta en vb, el medio para ponerlo como system seguro q no tiene nada q ver con vb.

En el foro de c/c++ hay un codigo mio donde muestra como hacer q otro proceso lanze el programa q se le pase como parametro, asi heradando sus privilegios.

No sirve para procesos de privilegios mas altos, ya q no puede abrir el proceso para crear el trhead.

Saludos!!


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: Ferсhu en 10 Enero 2008, 18:58 pm
a esto me referia con conseguir algo para crear el servicio jeje.

http://freyes.svetlian.com/tips/ejecutable-a-servicio.htm
Citar
Para crear un servicio con un ejecutable lo puedes hacer con herramientas de Microsoft o con herramientas de terceros.
Con herramientas de Microsoft

Se necesitan dos programas del Kit de recursos, instsrv.exe y srvany.exe; se lanza desde un cmd la línea:

<path>instsrv.exe "Nombre del Servicio" <path>srvany.exe

Es imprescindible pasar el path donde esten ambos ejecutables.

Una vez hecho esto, se abre regedit y en HKLM\system\CurrentControlSet\Services verás que se ha creado una clave(useasé carpeta) "Nombre del Servicio"(si abres la consola de servicios verás que ya se ve en la lista); pinchas en el árbol en ella y creas una subclave(useasé carpeta) llamada "Parameters", dentro de ella un valor de cadena llamado "Application" al que de contenido le pones Ruta\Nombre.exe. Ya tienes creado el servicio. De esta manera se crea con arranque automático y lanzado por cuenta del sistema; te metes en servicios y cambias lo que haga falta(se puede hacer desde línea de comandos con "sc.exe").

Ten en cuenta que el programa debe recibir las rutas absolutas de donde deba acceder, ya que al arrancarse como servicio digamos que "desconoce" en qué ruta se encuentra su propio ejecutable, con lo que no sabe manejar rutas relativas. Esto es así porque no se crea un servicio con el ejecutable en realidad, si no que se crea con srvany como el ejecutable del servicio y el ejecutable que queremos lanzar como parámetro (quizás si ubicamos una copia de srvany en la misma carpeta en la que está el ejecutable funciona, pero dependerá del ejecutable en sí)

Otra posibilidad, que a lo mejor te puede valer y es más simple, es lanzar la aplicación en un script de inicio del equipo; se abre el editor de políticas del sistema (gpedit.msc) y se especifica en "Configuración de equipo\Configuración de Windows\Archivos de comandos (inicio/apagado)". De esta forma se ejecutará, si bien no será un servicio.

Por último, puedes editar el registro para que se lance desde la clave "HKLM\Software\Microsoft\Windows\CurrentVersion\Run", creando un valor de tipo string (REG_SZ) al que llames como te parezca y que contenga la llamada al ejecutable. De esta forma se ejecutará, si bien no será un servicio.
Con herramientas de terceros

Existen herramientas de terceros que te permiten lanzar aplicaciones como servicios. Aquí pongo enlaces a cuatro de ellas:

Firedaemon
http://www.firedaemon.com/

Application as service 1.0
http://www.eltima.com/products/application-as-service/

Service Mill
http://www.activeplus.com/us/products/smill/

Serve All
http://www.transsoft.com/view_content.asp?ID=25

Lo de moficar a mano el regedit, lo podes cambiar facilmente con las apis de forma automatica.

Saludos!!


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: nhaalclkiemr en 10 Enero 2008, 20:11 pm
Citar
En el foro de c/c++ hay un codigo mio donde muestra como hacer q otro proceso lanze el programa q se le pase como parametro, asi heradando sus privilegios.

No sirve para procesos de privilegios mas altos, ya q no puede abrir el proceso para crear el trhead.

Si yo tengo un programa ejecutandose como "usuario" por defecto cualquiera programa que cargue el primer programa también lo hará como "usuario"...en "unsuario" incluyo a SYSTEM...y yo puedo hacer un programa sencillo en VB que haga lo mismo que tu en C...con cojer los parametros y ejecutarlos llega :xD

Citar
Otra posibilidad, que a lo mejor te puede valer y es más simple, es lanzar la aplicación en un script de inicio del equipo; se abre el editor de políticas del sistema (gpedit.msc) y se especifica en "Configuración de equipo\Configuración de Windows\Archivos de comandos (inicio/apagado)". De esta forma se ejecutará, si bien no será un servicio.

Esto es a lo que me refería yo con el método Scripting...se como hacerlo directamente desde el registro...el método lo tengo puesto en el manual que tengo en Tutoriales y Documentacion si a alguien le interesa...

Sobre lo de los servicios eso todo que me pusiste sabía la mayoría, yo a ver yo se crear, modificar, intervenir y eliminar servicios (tanto en el registro como de otras maneras con APIs y asi) e incluso ejecutar el mio propio...lo malo es que para que una aplicación corra como un servicio tiene que dar algun tipo de respuesta en un tiempo determinado...si no lo hace al poco se cierra...sino prueva a crear un servicio por ejemplo poniendo el notepad.exe o asi...ya verás lo que pasa...

Lo malo es que yo no sé dar esa "respuesta" para que el servicio se mantenga...aún asi durante esos segundos puedo cojer y ejecutarme otra vez a mi mismo...pero la verdad prefiero el metodo facil de las tareas programadas....pero si sabeis como dar esa "respuesta" desde VB os lo agradecería mucho...

Weno gracias y saludos ;)


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: oscar_df en 24 Septiembre 2010, 06:49 am
hola que tal, espero me puedan ayudar, y espero mi pregunta este en el tema correcto.

tengo una tarea programa en cada servidor con windows 2003 tengo que correrla en ocasiones manualmente, aqui es donde me gustaria saber si se puede generar una batch en el que pueda hacerlo de forma mas facil ya que son 52 servidores y me tardo mucho en hacerlo manualmente, se podra hacer un batch que me permita ingresas las 52 tareas programadas y que con un doble click esta proceso haga correr las tareas en sus respectivos servidores? de antemano les agreadezco la atencion.

saludos. mexico city


Título: Re: Hacer correr tarea programada ya establecida
Publicado por: seba123neo en 26 Septiembre 2010, 22:34 pm
hola que tal, espero me puedan ayudar, y espero mi pregunta este en el tema correcto.

tengo una tarea programa en cada servidor con windows 2003 tengo que correrla en ocasiones manualmente, aqui es donde me gustaria saber si se puede generar una batch en el que pueda hacerlo de forma mas facil ya que son 52 servidores y me tardo mucho en hacerlo manualmente, se podra hacer un batch que me permita ingresas las 52 tareas programadas y que con un doble click esta proceso haga correr las tareas en sus respectivos servidores? de antemano les agreadezco la atencion.

saludos. mexico city

hombre reviviste un post de años, crea uno nuevo.