Procesos en .NET

Agosto 14, 2008

Lanzando y monitorizando programas externos desde .NET

El namespace System.Diagnostics tiene una clase Process en el que usted puede lanzar programas externos. Usted pasará el nombre de un archivo ejecutable o un archivo con una extensión asociada con una aplicación ejecutable.

System.Diagnostics.Process.Start(“c:\…\MyTextFile.txt”)

 

Este código retorna un objeto Process:

Dim myProcess As Process = System.Diagnostics.Process.Start("c:\...\MyTextFile.txt")

MessageBox.Show(myProcess.ProcessName)

 

Un método sobrecargado Process.Start toma un parámetro ProcessStartInfo que deja a usted configurar los valores de inicialización tal como WindowStyle.

Dim psInfo As New System.Diagnostics.ProcessStartInfo ("c:\...\MyTextFile.txt")

psInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal

Dim myProcess As Process = System.Diagnostics.Process.Start(psInfo)

 

O

Dim myProcess As System.Diagnostics.Process = new System.Diagnostics.Process()

myProcess.StartInfo.FileName = "c:\...\MyTextFile.txt"

myProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal

myProcess.Start

 

Usted puede también hacer todo a través del IDE arrastrando un componente Process dentro de su formulario desde el área de componentes de la barra de herramientas.

Iniciar un proceso y esperar hasta que este termine

Para esperar que un proceso lanzado finalice, llamé al método Process.WaitForExit. Su aplicación detendrá la ejecución hasta que el proceso lanzado termine. Sin embargo, Esto causará que su aplicación deje de responder a los eventos del sistema tal como el evento Paint.

'Comienza un nuevo proceso (Notepad).

'

Dim myProcess As Process = System.Diagnostics.Process.Start("MyTextFile.txt")

'

'Espera hasta que termine.

'

myProcess.WaitForExit()

 

MessageBox.Show("Notepad ended: " & myProcess.ExitTime & "." & _

System.Environment.NewLine & "Exit Code: " & myProcess.ExitCode)

'

'Cierra el proceso para liberar recursos

'

myProcess.Close()
			

 

Comenzar un proceso invisible

Usted puede iniciar un proceso y obtener su salida sin una ventana visible. El siguiente ejemplo muestra como cambiar a la carpeta de sistema, ejecute el comando DOS Dir “*.exe” y envié la salida al archivo Ouput.txt. El Shell de Windows XP reconoce “&&” como un comando separador, por lo tanto, usted puede poner múltiples comandos en una sola línea. El operador “>>” redirecciona la salida a un archivo.

Dim myProcess As Process = New Process()

Dim s As String

Dim outfile As String = Application.StartupPath & "\Output.txt"

'

'Obtener la ruta de Sistema.

'

Dim sysFolder As String =        System.Environment.GetFolderPath(Environment.SpecialFolder.System)

'

'Crear la línea de comandos

'

myProcess.StartInfo.FileName = "cmd.exe"

myProcess.StartInfo.Arguments = "/C cd " & sysFolder & _

        " && dir *.com >> " & Chr(34) & outfile & Chr(34) & " && exit"

'

'Comience el proceso en una ventana oculta

'

myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

myProcess.StartInfo.CreateNoWindow = True

myProcess.Start()

'

'Termine el proceso si este no finalize en un minute

'

myProcess.WaitForExit(1000)

If Not myProcess.HasExited Then

myProcess.Kill()

End If

'

'Muestre los resultados

'

MessageBox.Show("The 'dir' command window was " & _

        "closed at: " & myProcess.ExitTime & "." & System.Environment.NewLine & _

        "Exit Code: " & myProcess.ExitCode)

 

myProcess.Close() 
			

 

Determinar cuando un proceso termina

La clase proceso lanza un evento Exited cuando un proceso finaliza. Usted debe configurar la propiedad Process.EnableRaisingEvents y crear un manejador de evento.

myProcess.EnableRaisingEvents = True

'

'Añadir un manejador de eventos.

'

AddHandler myProcess.Exited, AddressOf Me.ProcessExited

'

myProcess.Start()

'

' Manejador de evento

'

Friend Sub ProcessExited(ByVal sender As Object, _

            ByVal e As System.EventArgs)

 

    Dim myProcess As Process = DirectCast(sender, Process)

 

    MessageBox.Show("The process exited, raising " & _

            "the Exited event at: " & myProcess.ExitTime & _

            "." & System.Environment.NewLine & "Exit Code: " & myProcess.ExitCode)

 

    myProcess.Close()

End Sub

 

Nota, Si el proceso lanzado no responde, también lo hará su aplicación

 

Controlando el proceso de Entrada y Salida

Usted puede necesitar enviar una entrada directamente a un proceso lanzado y enviar la salida directamente a su programa. Para programas que usan StdIn, StdOut y StdErr, tal como aplicaciones de consola, usted puede sobrescribir los valores por defecto y proveer un StreamWriter para escribir una entrada y StreamReaders para leer las salidas StdOut y StdErr.

.NET usa la función Win32 ShellExecute para lanzar procesos entonces cuando usted quiera reasignar Streams de entrada y salida, usted debe configurar la propiedad ProcessStartInfo.UseShellExecute a false antes de comenzar el proceso. También usted debe especificar la ruta completa del archivo o la ubicación del archivo que deberá estar en la cadena de ruta environmet o en uno de los lugares de búsqueda de Windows para archivos.

Dim myProcess As Process = New Process()

Dim s As String myProcess.StartInfo.FileName = "cmd.exe"

 

myProcess.StartInfo.UseShellExecute = False

myProcess.StartInfo.CreateNoWindow = True

myProcess.StartInfo.RedirectStandardInput = True

myProcess.StartInfo.RedirectStandardOutput = True

myProcess.StartInfo.RedirectStandardError = True

myProcess.Start()

 

Dim sIn As StreamWriter = myProcess.StandardInput

Dim sOut As StreamReader = myProcess.StandardOutput

Dim sErr As StreamReader = myProcess.StandardError

 

sIn.AutoFlush = True

sIn.Write("dir c:\windows\system32\*.com" & System.Environment.NewLine)

sIn.Write("exit" & System.Environment.NewLine)

s = sOut.ReadToEnd()

 

If Not myProcess.HasExited Then

        myProcess.Kill()

End If

 

MessageBox.Show("The 'dir' command window was " & _

        closed at: " & myProcess.ExitTime & "." & _

        System.Environment.NewLine & "Exit Code: " & myProcess.ExitCode)

 

sIn.Close()

sOut.Close()

sErr.Close()

myProcess.Close()

MessageBox.Show(s)

 

 

Para programas que no usen StdDin, usted puede usar el método SendKeys para ingresar teclas.

Dim myProcess As Process = New Process()

 

myProcess.StartInfo.FileName = "notepad"

myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal

myProcess.EnableRaisingEvents = True

 

AddHandler myProcess.Exited, AddressOf Me.SendKeysTestExited

    myProcess.Start()

'

' Wait until the program is ready for input.

'

myProcess.WaitForInputIdle(1000)

 

If myProcess.Responding Then

        System.Windows.Forms.SendKeys.SendWait( _

                "This text was entered using SendKeys.")

Else

   myProcess.Kill()

End If

El sitio objectsbydesign lista los libros más recomendados del diseño orientado a objetos, cabe mencionar que uno de esos libros “Applying UML and Patterns:
An Introduction to Object-Oriented Analysis and Design
” existe la versión en español, la cual estoy estudiando muy detalladamente y me ha dejado muy contento, sin duda un referente para el conocimiento del Análisis y Diseño Orientado a Objetos.

Cansado de postear con el editor de su blog, bueno afortunadamente existen algunas alternativas bastante interesantes (instalando Windows Live Writer mientras escribo). El sitio bloggingbits lista 15 alternativas para escritorio que permiten trabajar off-line, productivamente y sin distracciones. Solo me queda agregar que Word 2007 también tiene esta función.

 

Impresionante revista IT

Junio 14, 2008

Software Guru es una revista de distribución Mexicana, la cual me ha llamado la atención por sus contenidos, tan directamente relacionado con los propósitos de la célula, existen números dedicados por ejemplo a Metodologías Agiles, Business Intelligence, técnicas de programación, Diagramas UML entre otros. Aunque en la página no pude encontrar links a sus artículos, a través de Google encontré un enlace a sus números en PDF.

.Net Open Source

Junio 13, 2008

Buscando comuniones entre .NET y el open Source, he encontrado está página, la cual muestra interesantes proyectos, entre ellos el proyecto Wii de Johnny Chung Lee, sin duda un gran material digno de ser investigado, además de CMS, Logging, Base de datos, etc

 

Tiempos de respuesta, disponibilidad, y estabilidad son los factores vitales a tener en cuenta al crear y mantener aplicaciones web. Si te preocupa la velocidad de tus páginas web o quieres asegurarte que están en plena forma antes de iniciar o lanzar un proyecto, en Six Revisión han reunido unas cuantas herramientas libres que te ayudarán a lograrlo. Herramientas sencillas de usar,utilizables en distintos Sistemas Operativos.

Bueno, Amigos este es mi primer Post en nuestro blog y aprovecho de públicar la primera parte del curso de UML y patrones, espero que después de tener un par de partes, poder preparar un videoTutorial (por el momento no tengo micrófono), además quisiera adelantar un artículo y manual de Business Intelligence que esta en fase de preparación, estoy traduciendo el SDK de Nero para grabar CDs/DVDs sobre .NET y varios notas mas, asi que traten de entretenerse con mi primer y humilde aporte, que luego habrá más, Stay tune!

UML Y PATRONES PARTE 1

Análisis y Diseño Orientado a Objetos

1. Conceptos de Análisis y Diseño Orientado al Objeto

a. Análisis

El análisis se centra en una investigación, no es la solución

Ej.

Si se desea un sistema para biblioteca

¿Cuáles procesos de la institución se relacionan con su uso?

b. Diseño
El diseño pone de relieve una solución lógica: como el sistema cumple con los requerimientos.

Ej.

¿De que manera el software del Sistema capturará y registrará los prestamos de los libros?

El Diseño es implementado sobre el Software y el Hardware.

2. Análisis y Diseño Orientado a Objetos
Sitúa el problema y Solución lógica dentro de la perspectiva de los Objetos (Cosas, Conceptos, Entidades)

a. Análisis Orientado al Objeto
Se procura identificar y describir los objetos o conceptos dentro del dominio del problema.

Ej. Libro, Biblioteca, Cliente

b. Diseño Orientado a Objeto
Define los objetos lógicos que serán implementados en el lenguaje, se definen los atributos y métodos.

Ej. Un Objeto libro puede tener un atributo título y un método imprimir

3. Procesos de Negocios
Trata lo que de debe hacer en el dominio del problema
Ej.

o Realizar Ventas

o Pagar Empleados

o Realizar Pedidos

En el Diseño y Análisis Orientado a Objetos, los procesos de negocios corresponden al análisis de Requerimientos y estos son expresados en casos de uso.

Los casos de uso no se centran en objetos pero son un paso importante en el Análisis y Diseño Orientado a Objetos.

Analogía de la Empresa

Análisis y Diseño Orientado A Objetos

Documentos Relacionados

¿Cuáles Son los procesos de Negocios?

Análisis de Requerimientos

Casos de Uso

4. Papeles o funciones de la organización

Debemos identificar los papeles de las personas que intervendrán en los procesos

o Cliente

o Representante de Ventas

o Ingeniero de Software

En el análisis y diseño orientado a objeto, los papeles o funciones corresponden al análisis del dominio orientado a objetos y estos son expresados con un modelo conceptual.

El modelo conceptual, no solo incluye papeles sino también cosas u objetos de interés.

Ej

Analogía de la Empresa

Análisis y Diseño Orientado A Objetos

Documentos Relacionados

¿Cuáles Son los procesos de Negocios?

Análisis de Requerimientos

Casos de Uso

¿Cuáles son los Papeles de los Empleados?

Análisis del Dominio

Modelo Conceptual

5. ¿Que función cumple cada empleado? ¿Cómo colabora el Personal?

Determinamos la manera de cumplir los procesos, esto es una actividad de diseño, es decir, orientado a soluciones.

Definimos las responsabilidades de los empleados a fin de efectuar las tareas necesarias para efectuar las tareas necesarias para llevar a cabo un proceso, así como también de que manera los empleados colaboran o comparten el trabajo.

En el análisis y diseño orientado a objetos, las funciones y colaboraciones corresponden al diseño orientado a objetos, específicamente a la Asignación de Responsabilidades en caso de las funciones y diseño de interacciones en el caso de las colaboraciones, y estos son expresados con diagramas de diseño de clases y con diagramas de colaboración.

La Asignación significa distribuir las funciones y responsabilidades entre varios objetos de Software. Del mismo modo que se asignen a los empleados.

Los objetos Normalmente colaboran o interactúan para cumplir con sus responsabilidades, como lo hacen las personas.

La Asignación de Responsabilidades es la actividad que influye más profundamente en la solidez, capacidad de mantenimiento y en la reutilizabilidad.

Analogía de la Empresa

Análisis y Diseño Orientado A Objetos

Documentos Relacionados

¿Cuáles Son los procesos de Negocios?

Análisis de Requerimientos

Casos de Uso

¿Cuáles son los Papeles de los Empleados?

Análisis del Dominio

Modelo Conceptual

¿Cuáles son las funciones de los Empleados?

¿Cómo interactúan entre ellos?

Asignación de Responsabilidades

Diseño de Interacciones

Diagramas de Diseño de Clases

Diagramas de Colaboración

Caso Práctico “Juego de Dados”

Juego de Dados, Si el Total es siete gana de lo contrario pierde.

  1. Definición de Casos de Uso

Para entender el requerimiento debemos conocer los procesos del dominio y el ambiente Externo (Factores Externos que participan en los procesos)

Dichos procesos pueden expresarse en casos de uso

Ej

Caso de Uso

:

Juega un juego

Participantes

:

Jugador

Descripción

:

Este caso de uso comienza cuando el jugador recoge y hace rodar los dados. Si los puntos suman Siete, gana y pierde si suman cualquier otro número

  1. Definición del Modelo Conceptual

Para descomponer un problema hay que identificar los conceptos, las etiquetas y las asociaciones que se juzgan importantes.

El modelo conceptual no es una descripción de los componentes de Software; representa los conceptos del mundo real.

El modelo conceptual muestra los conceptos jugador, dados, juegos de dados, sus asociaciones y atributos.

  1. Definición de los diagramas de colaboración

Los diagramas de colaboración presentan el flujo de mensajes entre las instancias y la invocación de métodos.

El diagrama de colaboración, muestra gráficamente el paso esencial del juego, enviando mensajes a las instancias de las clases jugador y dados.

  1. Definición del diseño de clases

Para definir una clase es preciso contestar varias preguntas :

· ¿Cómo se conectan unos objetos a otros?

· ¿Cuáles son los métodos de una clase?

Para esto debe examinar detenidamente los diagramas de colaboración que indica las conexiones necesarias entre objetos y también los métodos que cada clase debe definir.

El diagrama de diseño de clases muestra las definiciones de clases que han de implementarse en el software.


Diagrama de clases para los componentes de Software

A diferencia del modelo conceptual, este diagrama no muestra gráficamente conceptos del mundo real, describe únicamente componentes de Software.

Para indicar de qué manera los objetos se conectan entre sí a través de atributos, una línea con una flecha en la punta indicará un atributo.

Ejemplo: Juego de dados, posee una atributo que apunta a una instancia de un jugador

Análisis y Diseño

Es conveniente distinguir constantemente entre investigación (análisis) y solución (diseño), es útil tener un paso bien diferenciado que indague la naturaleza del problema antes de buscar la manera de crear la solución.

Adjunto PDF

Siendo este mi primer artículo en este Blog y siendo además el puntapie inicial para el desafio que significa esta celula de estudios me he decidido a entregar los aportes necesarios para motivar las publicaciones del resto de la celula, este articulo entrega una breve guia tutorial en PDF la cual permite transformar a Dreamweaver CS3 en un ambiente de desarrollo, en este ejemplo para PHP/MySQL, mas adelante veremos como mediante DW 8 podremos hacer algo similar pero con un modelo mas versatil y robusto como el proporcionado por PHP/ADODB. También será tarea el entregar algunos ejemplos de desarrollo en estos modelos y porsupuesto algo no menor será la entrega de tecnicas de desarrollo rapido de aplicaciones (DRA) en DW 8 y CS3 usando componentes como el ADDT para CS3 o el ya difunto Interakt (que le dio paso a ADDT) en la iniciativa de ADOBE de potenciar a DW como un IDE que entregue soporte para DRA.

Descargar tutorial