debug_mode=ON

Buscar en

 
 

Como abrir un form desde un servicio de windows?

Milor
Milor escribió
hace 1 años

Pues necesito abrir un form desde un servicio de windows que cree con C# es una servicio muy basico, tiene un pequeña funciona que repite cada 15s (con un timer) que devuelve true o false, cuando devuelve false, deberia para el SERVICIO (o el timer) mostrar el AVISO en pantalla, y hasta que no CIERRE el aviso (automaticamente) o manual, el servicio no deberia volver a activarse o el timer.

Cuando pongo: form f; f = form(); f.Show(); no muestra nada, y creo que nisiquiera inicia.

 

6 respuestas en "Como abrir un form desde un servicio de windows?"

Sentach
Sentach escribió
hace 1 años

#1   

Tienes que marcar el servicio como interactivo.

Vas a la consola de servicios:

  1. pulsas Win+R
  2. escribes services.msc
  3. buscas tu servicio y en el menu contextual pon propiedades.
  4. selecciona la pestaña de Iniciar sesión
  5. marca el check de permitir a los servicio que interactuen con el escritorio.

Todo lo anterior funciona muy bien si no estas en Windows Vista, ya que los servicios estan en una sesión distinta que la de los procesos.

Espero que te sirva.

 

Milor
Milor escribió
hace 1 años

#2   

Confirma que todavía no lo probé. Así que disculpas ^^ lo haré en breve.

Pero cuando llame al FORMULARIO (si funciona, espero que si).

La ejecución de servicio quedara pausada a que acabe se cierre el FORMULARIO o seguirá ejecutándose?

 

Sentach
Sentach escribió
hace 1 años

#3   

Si antes de hacer el showmodal paras el timer y cuando vuelva del show modal lo vuelves a activar imagino que funcionará.

 

Milor
Milor escribió
hace 1 años

#4   

Hago un: if (Application.OpenForms.Count == 0)
si es 0 lo abro y si no lo cierro. Y lo recreo... no se si sera buena opcion. Mirare lo que dices.

Aunque tengo un problema... si que abre el formulario pero las etiquetas y loas otras cosas, no se ven y no puedo interacturar con el. Me pongo arriba y sale el tiempo. ^^

Tambiem me gustaria que se mostrase por encima de todo, hasta del salvapantallas :)

Se puede adjuntar codigo de alguna manera?

 

Milor
Milor escribió
hace 1 años

#5   

Lo he solucionado parcialmente:

si lo abro con: Application.Run(m_frmAviso);
ningun problema (supongo que hara cosas que un simple, frmAviso.Show() no hace, asi que hare un boleano, para que la primera vez lo haga asi y el resto, frmASviso.Show()

Vaya ya que hago un close() supongo debo siempre arrancarlo con la primera opcion. ^^

Voy a probar ^^

public Service1()
    {
        InitializeComponent();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        formulario();
    }

    protected override void OnStart(string[] args)
    {
        crtlTiempo = new System.Timers.Timer();
        crtlTiempo.Interval = 5000;
        crtlTiempo.Elapsed += new System.Timers.ElapsedEventHandler(crtlTiempo_Elapsed);
        crtlTiempo.Enabled = true;
    }

    protected override void OnStop()
    {
        crtlTiempo = null;
    }

    private void crtlTiempo_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        if (Application.OpenForms.Count == 0)
        {
            m_frmAviso.Show();
            m_frmAviso.Activate();
        }
        else
        {
            m_frmAviso.Close();
            formulario();
        }
    }

Falta comprobar la condicion( esto lo que deberia hacer es abrir un formulario y ponerlo en primer plano en 5s, luego cerrarlo y repetir). El formulario queda a medio cargar :S

la funcion formulario() pone las etiquetitas, titulos, propiedades, etc ^^

 

Milor
Milor escribió
hace 1 años

#6   

Sentach gracias por todo.

Creo que ya lo tengo casi listo.

Solo me falta saber reiniciar el sistema desde .net (lo más rápido posible y que nunca falle)

Comprobar si la función que devuelve true o false, según la condición es correcta.

Tambiem me gustaria que comprobara que es mi maquina al encenderse. Leyendo alguna informacion de la bios o disco duro.

Y hacer que el formulario siempre permanezca en primer plano, que sea modal sobre windows, es decir que no puedas hacer nada hasta que este cerrado, si esto no fuera posible, por lo menos que se muestre siempore.

Lo dicho muchas gracias. ^^

 
 
 
 

© Copyright 2008-2009 debug_mode=ON | Aviso legal | Contacto | FAQ | ¿Quiénes somos? |