Exemplo n.º 1
0
        public ServicePrintMonitor()
        {
            Log.Info("-- Se levanta el Servicio para Monitorizar el Servicio de Impresión --");
            InitializeComponent();

            Log.Info("-- Nos suscribimos a los eventos de impresión --");
            EventMonitorPrinting.PrintingEven();

            // Descomentar para suscribirnos a los eventos de creación de ficheros de spool
            Log.Info("Nos suscribimos a los eventos de creación de ficheros de Spool");
            WatchIO.FileEvent(LocalPrinting.PathPrintSpool());

            // Definimos un Timer para lanzar una tarea de forma periodica.
            Tiempo          = new Timer();
            Tiempo.Interval = 3600000; // 1 hora
                                       //Tiempo.Interval = 10000; // 10 sg

            //Tiempo.Elapsed += new ElapsedEventHandler(Metodo_delegado a ejecutar);
            //Tiempo.Elapsed += new ElapsedEventHandler(Programa.PruebaServicio);
            //Tiempo.Elapsed += new ElapsedEventHandler(Programa.Inicio);

            // Tarea periodica: Comprobar que estamos suscritos a los eventos de impresión
            Log.Info("Lanzamos EventMonitorPrinting.IsAliveEvents() de forma periódica");
            Tiempo.Elapsed += new ElapsedEventHandler(EventMonitorPrinting.IsAliveEvents);

            // Descomentar para la suscripción a los eventos de creación de ficheros de spool
            Tiempo.Elapsed += new ElapsedEventHandler(WatchIO.IsAliveEvents);

            //Fecha = DateTime.Now.ToShortDateString().Replace("/", "-");
        }
Exemplo n.º 2
0
        /// <summary>
        /// Punto de entrada principal para la aplicación.
        /// </summary>
        static void Main()
        //static void descomentar_linea_anterior_para_generar_instalador()
        {
            /// Leemos la configuración de App.config para log4net y generar archivos de log
            //Path de los ejecutables del Servicio Monitor de Impresión
            string PathAppConfig = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            // Nombre fichero ejecutable del Servicio Monitor de Impresión
            string NameAppConfig = System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location);

            Log.Info("PATH de App.config: " + PathAppConfig + @"\" + NameAppConfig + ".config");

            // Aviso reinicio servicio
            //Log.Warn("Se reinicia el servicio  Monitor Impresion");

            /// Inicializamos log4net para que recargue configuración en tiempo de ejecución
            System.IO.FileInfo FileAppConfig = new System.IO.FileInfo(PathAppConfig + @"\" + NameAppConfig + ".config");
            log4net.Config.XmlConfigurator.ConfigureAndWatch(FileAppConfig);


            Log.Info("");
            Log.Info("");
            Log.Info("");
            Log.Info("");
            Log.Info("");
            Log.Info("");
            Log.Info("");
            Log.Info("===========================================================================================");
            Log.Info("-----------                                                                    ------------");
            Log.Info("-----------                INICIAMOS EL MONITOR DE IMPRESION                   ------------");
            Log.Info("-----------                                                                    ------------");
            Log.Info("===========================================================================================");
            Log.Info("Directorio de Spool: " + LocalPrinting.PathPrintSpool());

            // Revisamos la congiguracion de las impresoras. Se actualizan sus propiedades en caso necesario para que se guarden los documentos impresos
            LocalPrinting.ConfigurePrinters();

            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                new ServicePrintMonitor()
            };
            ServiceBase.Run(ServicesToRun);
        }
Exemplo n.º 3
0
        } //AnalizePrintJob()

        /** \brief Almacena documentos después de impresión
         * \details Comprueba las propiedades de la impresora para ver si se almacenan los documentos después de su impresión.
         * Si no se almacenan se cambia la propiedad para que se almacen.
         * \param Printer Nombre de la impresora
         * http://www.codeproject.com/Articles/6899/Changing-printer-settings-using-C
         */

        public bool KeepSpoolFiles(string Printer)
        {
            IntPtr WphPrinter;

            STRUCT_API_PRINTING.PRINTER_DEFAULTS WpPrinterDefaults = new STRUCT_API_PRINTING.PRINTER_DEFAULTS();
            var    PrinterInfo5          = new STRUCT_API_PRINTING.PRINTER_INFO_5();
            IntPtr pPrinterInfo5         = IntPtr.Zero;
            bool   ConfiguracionCorrecta = false;

            /// Abrimos la impresora y obtenemos el identificador interno de la impresora
            if (OpenPrinter(Printer, out WphPrinter, ref WpPrinterDefaults))
            {
                Log.Info("Este es el contenido de WphPrinter: #" + WphPrinter.ToString() + ".");
                /// Obtenemos las propiedades de la impresora
                PrinterInfo5 = GetPrinter5(WphPrinter);

                ///Cerramos la impresora
                ClosePrinter(WphPrinter);

                /// Establecemos las propiedades para actualizar la impresora
                PrinterInfo5.pPrinterName = Printer;
                PrinterInfo5.pPortName    = LocalPrinting.PrinterPortName(Printer);

                Log.Debug("PrinterInfo5.pPrinterName: " + PrinterInfo5.pPrinterName);
                Log.Debug("PrinterInfo5.pPortName: " + PrinterInfo5.pPortName);
                Log.Debug("PrinterInfo5.Attributes: " + PrinterInfo5.Attributes.ToString());
                Log.Debug("PrinterInfo5.device_not_selected_timeout: " + PrinterInfo5.device_not_selected_timeout.ToString());
                Log.Debug("PrinterInfo5.transmission_retry_timeout: " + PrinterInfo5.transmission_retry_timeout.ToString());

                /// Si no se guardan los ficheros del spool de impresión:
                uint flag = (uint)PrinterInfo5.Attributes & (uint)ENUM_API_PRINTING.ATTRIBUTE_PRINTER_INFO.PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS;
                if (flag == 0) // No se guardan, No está activo el bit para guardar los trabajos de impresión
                {
                    Log.Info("La impresora " + Printer + " no guarda los ficheros de Spool de impresión.");

                    /// - Modificamos el atributo de impresora para que guarde los ficheros de Spool
                    PrinterInfo5.Attributes += (uint)ENUM_API_PRINTING.ATTRIBUTE_PRINTER_INFO.PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS;

                    /// - Abrimos la impresora con permiso de administardor para modificar sus propiedades
                    WpPrinterDefaults.DesiredAccess = STRUCT_API_PRINTING.PRINTER_ACCESS_MASK.PRINTER_ACCESS_ADMINISTER;
                    if (!OpenPrinter(Printer, out WphPrinter, ref WpPrinterDefaults))
                    {
                        Log.Fatal("No se tiene acceso como Administrador a la impresora: -" + Printer);
                    }

                    Log.Info("-- Abrimos la impresora: " + Printer + " en modo Administrador.");

                    // - Asignamos el puntero al struc con las propiedades de la impresora
                    pPrinterInfo5 = Marshal.AllocHGlobal(Marshal.SizeOf(PrinterInfo5));
                    Marshal.StructureToPtr(PrinterInfo5, pPrinterInfo5, false);

                    /// - Establecemos las propiedades
                    SetPrinter5(WphPrinter, ref pPrinterInfo5);

                    /// - Cerramos la impresora
                    Log.Info("-- Cerramos la impresora: " + Printer + " en modo Administrador.");
                    ClosePrinter(WphPrinter);
                } // end if
                ConfiguracionCorrecta = true;
            }
            else
            {
                Log.Info("No se ha podido encontrar la impresora: -" + Printer);
            } // end if principal
            return(ConfiguracionCorrecta);
        }     // KeepSpoolFiles()
Exemplo n.º 4
0
        /** \brief Test creación archivo
         * \details Creamos un archivo para testear si estamos suscritos a los eventos de Sistema de Archivos
         */

        public static void IsAliveEvents(object sender, EventArgs Args)
        {
            Log.Debug("IsAliveEvents(INICIO) -> Valor de IsEvenCapture: " + IsEvenCapture.ToString());


            // Vamos a chequear si estamos suscritos a los eventos del Sistema de Archivos
            Log.Debug("IsAliveEvents -> Ponemos la variable de control IsEvenCampture = false");
            IsEvenCapture = false;

            // Creamos un fichero para que se produzca un evento de creación de archivo del Sistema de Archivos
            Log.Debug("Creamos el fichero de testeo: " + LocalPrinting.PathPrintSpool() + @"\" + "test.SPL");
            File.Create(LocalPrinting.PathPrintSpool() + @"\" + "test.SPL").Dispose();

            //Esperamos 3000  milisegundos
            Log.Debug("IsAliveEvents -> Esperamos 3 sg");
            System.Threading.Thread.Sleep(3000);

            // Borramos los ficheros de test
            try
            {
                File.Delete(LocalPrinting.PathPrintSpool() + @"\" + "test.SPL");
            }
            catch (Exception e)
            {
                Log.Error("No se ha podido borrar el fichero de test: " + LocalPrinting.PathPrintSpool() + @"\" + "test.SPL");
            }

            try
            {
                File.Delete(LocalPrinting.PathPrintSpool() + @"\" + _DIR_SPOOL_BACKUP + @"\" + "test.SPL");
            }
            catch (Exception e)
            {
                Log.Error("No se ha podido borrar el fichero de test: " + LocalPrinting.PathPrintSpool() + @"\" + _DIR_SPOOL_BACKUP + @"\" + "test.SPL");
            }

            /*
             * Chequeamos la variable de control para ver si efectivamente estamos suscritos.
             * Si estamos subscritos está variable se tenía que haber actualizado a través del metodo suscrito
             * OnCreated().
             *
             * En caso de que no estemos suscritos lanzamos el método FileEvent() para subscribir el método
             * OnCreated().
             */
            if (IsEvenCapture)
            {
                Log.Info("Suscripción método WatchIO.OnCreated() a eventos del Sistema Archivos: OK");
            }
            else
            {
                Log.Error("No suscrito a los eventos del Sistema Archivos. Nos suscribimos.");
                try
                {
                    FileEvent(LocalPrinting.PathPrintSpool());
                    IsEvenCapture = true;
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
            }
        } //Fin IsAliveEvents()