Servicio de Conversiones [ps2pdf... Servicio Windows usado para la conversión de ficheros] Fecha: 26/Abr/2004 (25/Abr/2004)
|
. |
Motivación
El hecho de crear un Servicio de Windows para manejar la conversión de ficheros, puede que no sea algo muy fácil de explicar, pero en ciertas ocasiones necesitamos realizar conversiones, como en el ejemplo ps2pdf ( de la misma manera se podrían hacer tiff2pdf doc2pdf etc..), de una manera transparente sin que afecte a la ejecución de cualquier otro proceso que estemos desarrollando. Esto se puede realizar de una manera rápida y sencilla a través de Servicios Windows y de la clase FileSystemWatcher.Implementación
La idea es sencilla, supongamos que tenemos un directorio especial ( por ejemplo el directorio X:\Conversor ) lo que necesitamos es que cualquier documento .ps que copiemos a ese directorio sea convertido a pdf de una manera transparente si ninguna interacción de nuestra parte. Para ello .NET dispone de una clase System.IO.FileSystemWatcher la cual 'suelta' eventos cada vez que un fichero es creado, movido o borrado de un directorio específico. Basta por lo tanto implementar los manejadores para esos eventos y nuestro sistema estará realizado.
Código
Con el fin de no hacer tan pesada la lectura no pongo el código del WindowsService, bastaría implementar en el método OnStart una llamada a WatcherClass.
Para llevar un seguimiento de los procesos se ha creado el evento OnMsg, debemos implementar un método en el servicio para manejarlo, en el código de ejemplo está implementado para Introducir estos 'Mensajes' en el Log de Applicacion del sistema. La implementación de la clase FileSystemWatcher es la siguiente:public class WatcherClass() {#region Delegados y Eventospublic delegate void WatcherHandler(string Message);public event WatcherHandler OnMsg;#endregionprivate System.IO.FileSystemWatcher watch;public WatcherClass(){Inicializar();}private void Inicializar(){this.watch = new FileSystemWatcher(PATH,"*.ps");this.watch.Created += new FileSystemEventHandler(NewFile);// Si no se establece EnableReaisingEvents a true la clase no 'soltara' los eventosthis.watch.EnableRaisingEvents = true;}private void NewFile(object sender,FileSystemEventArgs e){string msg = string.Empty;string pdfname = string.Empty;msg = string.Format(" Archivo {0} ha entrado en el directorio ",e.Name);OnMsg(msg);pdfname = Path.GetFileName(e.FullPath);pdfname = pdfname.Replace(".ps",".pdf");ACRODISTXLib.PdfDistillerClass pdf = new ACRODISTXLib.PdfDistillerClass();try {pdf.FileToPDF(e.FullPath,pdfname,string.Empty);msg = string.Format(" Archivo {0} se ha convertido a {1}",e.Name,pdfname);OnMsg(msg);} catch {msg = string.Format(" ERROR el archivo {0} no se ha convertido a {1}",e.Name,pdfname);OnMsg(msg);}}}Notas sobre la instalación
Una vez generado el proyecto basta usar la herramienta InstallUtil para instalar el servicio Windows:
InstallUtil WindowsConversor.exe
Para activar el servicio usamos.
net start WindowsConversor
Para desactivarlo:
net stop WindowsConversor:
Y para desinstalarlo
InstallUtil -U WindowsConversor.exe
Fichero con el código de ejemplo: unai_windowsConversor - Tamaño 20.60 KB