lunes, 12 de octubre de 2009

Tutorial de programacion en 3 capas desde cero

Pues aqui les dejo un tutorial que hice, por su extension esta en PDF y pues es sobre el tema de la programacion en 3 capas , este tutorial esta pensado desde cero, para aquellos que han tenido contacto minimo o nulo con el tema, esta lo mas detallado que me fue posible.

Esta pensado para el enlace con bases de datos de SQL utilizando SQL server 2008 o 2005 y codificado paso por paso en visual studio 2008 utilizando visual basic, aunque es facilmente migrable a C#.

Espero les agrade, y pues ya saben cualquier detalle o sugerencia, por favor haganmelo saber.



DESCARGAR

viernes, 9 de octubre de 2009

Descargar un archivo via FTP

Pues aqui dejo una sencilla funcion para descargar un archivo mediante FTP, recive como parametros el nombre del archivo a descargar, el nombre que tendra despues de la descarga, el nombre de usuario ,el password de conexion, y la direccion del servidor, devuelve un booleano para saber que se completo la descarga.

----------------------CODIGO-------------------------------------

Private Function DescargaArchivo(ByVal Filename As String, ByVal NewFileName As String, _

ByVal UserNameFtp As String, ByVal PassFTP As String, ByVal URI As String) As Boolean


Dim Ftpconection As FtpWebRequest = CType(FtpWebRequest.Create(URI & "/" & Filename), FtpWebRequest)

' Creamos la nueva conexion del tipo web request donde URI es la direccion del servidor

Ftpconection.Credentials = New NetworkCredential(UserNameFtp, PassFTP)

'Asignamos las credenciales para el servidor

Ftpconection.Method = WebRequestMethods.Ftp.DownloadFile

'El metodo que utilizaremos como peticion, en este cado el de descargar

Try

Dim response As System.Net.FtpWebResponse = CType(Ftpconection.GetResponse, System.Net.FtpWebResponse)

Dim responseStr As IO.Stream = response.GetResponseStream

'guardamos el stream de datos

Dim fstr As New IO.FileStream(NewFileName, IO.FileMode.Create)

Dim buffer(2047) As Byte 'Buffer de transferencia

Dim ReadStream As Integer = 0

Do

ReadStream = responseStr.Read(buffer, 0, buffer.Length) 'leemos el stream de los datos

fstr.Write(buffer, 0, ReadStream) 'escribimos en el archivo

Loop Until ReadStream = 0

responseStr.Close() 'cerramos los archivos y las conexiones

fstr.Flush()

fstr.Close()

responseStr.Close()

response.Close()

Return True

Catch ex As Exception

Return False

End Try


End Function

----------------------CODIGO-------------------------------------

Este codigo requiere que agregemos la referencia

Imports System.Net

Ejemplo probado en Visual studio 2008

lunes, 5 de octubre de 2009

Redirigir la salida de un comando de MS-DOS a un RichTextBox

Bueno pues aqui dejo un code para redirigir la salida de un comando MS-DOS a un RichTextBox la aplicacion requiere 3 controles

1 RichtextBox con nombre RichTextBox1

2 Boton con nombre Button1

3 TextBox con nombre TextBox1

-------------Codigo-----------

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Command As New Process 'Creamos la instancia Process

Command.StartInfo.FileName = "cmd.exe" 'El proceso en si es el CMD

Command.StartInfo.Arguments = "/c " & TextBox1.Text

'Aqui le damos los parametros /c y el nombre del archivo a ejecutar

Command.StartInfo.RedirectStandardError = True 'Redirigimos los errores

Command.StartInfo.RedirectStandardOutput = True 'Redirigimos la salida

Command.StartInfo.UseShellExecute = False

'Para redirigir la salida de este proceso esta propiedad debe ser false

Command.StartInfo.CreateNoWindow = True

'Para que no abra la ventana del CMD

Try

Command.Start()

Dim Output As String = Command.StandardOutput.ReadToEnd() _

& vbCrLf & Command.StandardError.ReadToEnd() 'Guardamos las salidas en un string

RichTextBox1.Text = Output 'Desplegamos la salida en nuestro RichTextBox

Catch ex As Exception

MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

'En caso de cualquier error de ejecucion

End Try

End Sub

-------------Codigo-----------

En caso de tener errores agregen la referencia de System.Diagnostics para hacer uso de la clase Process

Con este ejemplo al escribir un comando de MS-DOS en el textbox y hacer click en el boton se ejecutaria el comando y nos mostraria la salida en el RichtextBox



Descargar este ejemplo
Para ver este fichero necesitas Winrar

Este ejemplo esta probado en Visual Studio 2008


Añadir privilegios a una aplicacion en Windows Vista

En algunos casos, cuando desarrollamos software que necesita privilegios necesitamos modificar la configuracion de la UAC de windows vista, generalmente esto no es problema en Windows XP ya que los administradores no requieren de ninguna confirmacion para ejecutar un instalador, o modificar el registro, e inclusive para crear carpetas o modificarlas en las areas protegidas por el sistema, pero en windows vista, un administrador no tiene el acceso total a cualquier recurso, si no que en su lugar nos encontramos con una ventana de confirmacion, un prompt de la UAC de windows que de manera intrusiva se antepone a cualquier accion que representa un "riesgo" para el sistema, en mi opinion personal esta situacion simplemente funciona para dar la impresion de una supuesta seguridad en el sistema, pero en realidad existen maneras de saltar esta ventana de confirmacion, pero el proposito de este articulo, es establecer los privilegios de una aplicacion desde su ensamblado para que esta exija estos privilegios al sistema al ejecutarse, asi que dentro del ensamblado podemos tener 3 opciones para la configuracion de la UAC:

1. AsInvoker: Al tener esta entrada en el ensamblado, la aplicacion obtiene los privilegios de aquel usuario o proceso que lo ejecuto, esta configuracion es la que se establece por defecto en cualquier proyecto nuevo

2. HighestAvailable: Con esta entrada, la aplicacion exije los privilegios mas altos posibles de acuerdo al usuario que ejecuto el programa, si se ejecuta como un usuario administrador, la aplicacion nos hara la peticion mediante un prompt de UAC para ejecutarse con los privilegios mas altos

3.requireAdministrator: Esta declaracion en el manifiesto establece que la aplicacion requiere los privilegios de administrador del sistema para poder ejecutarse, este nivel de ejecucion tambien haria una solicitud de confirmacion para un usuario Administrador y un prompt de Runas para un usuario con una cuenta limitada, esto quiere decir que solicitaria las credenciales (usuario y password) del administrador del sistema

Para establecer esta configuracion lo primero es ir a la configuracion de nuestra aplicacion, en el explorador de soluciones hacemos doble click en "My project"



Esto abrira la configuracion de nuestra aplicacion, en la primera pestaña tenemos la configuracion de la UAC

Esto nos mostraria el manifiesto de ensamblado de nuestra aplicacion, que esta en formato XML y ahi hariamos la modificacion

requestedExecutionLevel level="asInvoker" uiAccess="false" requestedExecutionLevel level="requireAdministrator" uiAccess="false" requestedExecutionLevel level="highestAvailable" uiAccess="false"


Podemos ver que ahi se especifica con lineas comentadas las posibles opciones que podemos establecer para el requestedExecutionLevel y solo con cambiar el atributo level a "requireAdministrator" ya tendriamos establecida la configuracion de la UAC para solicitar privilegios.

Solo bastaria guardar los cambios, al compilar la aplicacion, el visual studio puede que requiera reiniciar.

En nuestra carpeta de release podemos ver que nuestra aplicacion ahora aparece con el clasico escudo de Windows vista para una aplicacion con privilegios


Listo!, ya tenemos una aplicacion que aunque depende de la confirmacion del usuario para ejecutarse ya podria realizar tareas administrativas evitando el error de UnauthorizedAccessException.



Hay que tomar en cuenta que, si estamos creando una aplicacion implementando ClickOnce no nos es posible modificar esta configuracion, ya que, como maneja diversos niveles de confianza añade otras entradas al ensamblado y el nivel de ejecucion debe ser "AsInvoker", ya que si lo cambiamos provocariamos un error de compilacion.


Tampoco se podria establecer esta configuracion en librerias dll ya que estas heredan los privilegios de la aplicacion que las contiene referenciadas.


Ejemplo realizado en Visual Studio 2008

Primera publicacion

Hola mi nombre es Daniel , y he decidido crear un blog con el objetivo de hacer una bitácora sobre mi experiencia como programador en VS 2008 y compartir las diversas problematicas que se me han ido presentando durante el desarrollo de aplicaciones principal mente en Visual Basic .Net y esperando que sea de utilidad para otros desarrolladores que puedan llegar a estar en las mismas situaciones y pues de esta manera tener una base de conocimientos publica y ordenada, espero que les sirva a uds tanto como a mi, cualquier comentario es bien recibido, ok , sin mas que decir quedo a sus ordenes.