none
ayuda con Servicio de Windows RRS feed

  • Pregunta

  • Buenas, estoy realizando un servicio de windows que realice una captura de pantalla del escritorio y guarde la imágen en el disco duro.

    el código es el siguiente

    protected
     override
     void
     OnStart(string
    [] args)
            {
    
    try
    
                {
                    // Set the bitmap object to the size of the screen
    
                    bmpScreenshot = new
     Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
                    // Create a graphics object from the bitmap
    
                    gfxScreenshot = Graphics.FromImage(bmpScreenshot);
                    // Take the screenshot from the upper left corner to the right bottom corner
    
                    gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
                    // Save the screenshot to the specified path that the user has chosen
    
                    bmpScreenshot.Save("c:\\"
     + "foto.png"
    , ImageFormat.Png);
                }
                catch
     (Exception ex)
                {
                    string
     fic = @"c:\\erroresservicios.txt"
    ;
                    string
     texto =  ex.Message;
                    System.IO.StreamWriter sw = new
     System.IO.StreamWriter(fic);
                    sw.WriteLine(texto);
                    sw.Close();
                }
    
    }
    
    el fallo me lo da en la instrucción gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); y el mensaje que me guarda en el fichero es

    "CONTROLADOR NO VÁLIDO".

    ¿¿Alguien conoce cómo arreglar este fallo o alguna otra forma de capturar la pantalla??


    El mismo código en una aplicación de Windows Forms funciona perfecto, pero me gustaría que se iniciase sin que se viese nada, totalmente transparente al usuario.

    ¿¿ Existe forma de hacer eso con una aplicación windows forms o de otro tipo??

    Gracias por la ayuda.
    martes, 14 de abril de 2009 12:08

Respuestas

  • Hola,
    los servicios tradicionalmente no se ejecutan con la sesion del usuario actual... entonces debes tener en cuenta

    1- el servicio se debe ejecutar con la sesion del usuario actual
    2- el servicio debe estar configurado para poder interactuar con el escritorio , es decir configurarlo como "allow service to interact with desktop"


    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    jueves, 16 de abril de 2009 4:48

Todas las respuestas

  • Hola.


    alguna vez hice un servicio, el cual reproducia mp3s que se enviaban via ftp,   este programita lo hice primero en una winform y todo funcionaba, pero al meter la misma funcionalidad en un servicio de windows, no me lo permitia, marcaba error, y tambien me mando eso de controlador invalido.

    Lo que hice aquella vez, fue invocar el exe del winform via el servicio.  Al cliente no le aparecia nada, todo era transparente.

    Espero te sirva mi experiencia.  En cuanto encuentre el codigo te lo mando para que lo revises.




    saludos

    Erdnando Rodriguez Vargas
    Ing Erdnando Rodriguez Vargas consultor externo, tecnologias NET
    jueves, 16 de abril de 2009 0:48
  • Hola,
    los servicios tradicionalmente no se ejecutan con la sesion del usuario actual... entonces debes tener en cuenta

    1- el servicio se debe ejecutar con la sesion del usuario actual
    2- el servicio debe estar configurado para poder interactuar con el escritorio , es decir configurarlo como "allow service to interact with desktop"


    Colabora con la comunidad, si éste mensaje te ha sido de utilidad, márcalo como respuesta correcta.
    Juan Carlos Ruiz Pacheco
    Ingeniero de Sistemas
    Microsoft MVP C#
    MCP,MCTS,DCE+Platino,OCA,OCP
    Blog Técnico
    jueves, 16 de abril de 2009 4:48
  • Muchísimas gracias a los dos. Probé poniéndolo con la cuenta del sistema local y habilitándole que interactuara con el escritorio y ya funcionó.

    Por cierto Erdnando, si poner ese codiguito que comentas también me vendría bien conocerlo.

    Muchas gracias

    Saludos
    jueves, 16 de abril de 2009 11:44