JASoft.org

Detectar la existencia de una instancia previa de nuestra aplicación

Detectar la existencia de una instancia previa de nuestra aplicación
En Visual Basic "clásico" existía una propiedad del objeto App llamada PrevInstance que permitía averiguar de manera sencilla si ya se estaba ejecutando la aplicación actual, de forma que era inmediato evitar que se ejecutase dos veces el mismo programa. En .NET no existe nada similar pero es muy fácil simularlo gracias a la clase Process del espacio de nombres System.Diagnostics. El siguiente código permite conseguirlo:  private static bool PrevInstance() {      Process[] procesos = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);      return (procesos.Length > 1); } Lo que hace es buscar los procesos existentes que tengan el mismo nombre que el proceso actual. Si hay más de uno es que ya se está ejecutando la aplicación y por lo tanto podemos decidir no continuar. Existen otras técnicas para conseguir el mismo efecto (por ejemplo usando Mutexes o marcadores globales de este estilo que son mucho más seguros), pero este es sin duda el más sencillo y la mayo... [Más]

Cómo lanzar un proceso y recoger los resultados de su ejecución

Cómo lanzar un proceso y recoger los resultados de su ejecución
Hay ocasiones en las que es necesario poder lanzar un programa de línea de comandos (o no) de modo silencioso para realizar una tarea y luego recoger de algún modo el resultado de su ejecución. Un caso típico es el envíod e archivos por FTP. FTP.exe es un ejecutable muy útil que viene con Windows y que permite enviar órdenes a un servidor de archivos meidante un archivo de comandos que se le pasa como parámetro. La siguiente función sirve para ejecutar cualquier programa con su ventana (de haberla) oculta, devolviendo el resultado de la ejecución (normalmente lo que aparecería en la línea de comandos) en una cadena. Si se produce un error se lanza una excepció que recoge los detalles enviados por el programa a la línea de comandos. Puede resultar muy útil. Es necesario incluir System.Diagnostics.  //Lanza un proceso con su ventana oculta y devuelve el resultado private static string lanzaProceso(string Proceso, string Parametros) {  ProcessStartInfo startInfo = new ProcessStartInfo... [Más]

Cómo averiguar en qué ensamblado se está ejecutando nuestro código

Cómo averiguar en qué ensamblado se está ejecutando nuestro código
Hay ocasiones en las que creamos una biblioteca de funciones interesante y la compilamos como una DLL de .NET para su uso desde una o varias aplicaciones propias. Si, por el motivo que sea, no deseamos que este ensamblado se pueda utilizar desde aplicaciones ajena tenemos varias formas de hacerlo. La más sencilla tal vez sea la que nos permite averiguar cuál es el ensamblado (normalmente un ejecutable '.exe') que está haciendo uso de nuestro código y comprobar alguna propiedad del mismo para verificar que se trata de uno permitido. El código que nos permite averiguar el ensamblado actual desde el que se ejecuta un método es el siguiente: System.Reflection.Assembly.GetEntryAssembly() Con esto ya podemos comprobar las diversas propiedades del ensamblado para ver si cumple lo que nosotros deseamos, utilizando para ello las diferentes propiedades del objeto Assembly.  Por ejemplo, para aeriguar el nombre del ensamblado que está utilizando nuestro código basta con escribir: System... [Más]

Cómo averiguar la versión de la plataforma .NET

Cómo averiguar la versión de la plataforma .NET
Las diferentes versiones de la plataforma .NET tienen diversas funcionalidades por lo que, cuando usemos algo específico de una determinada, resultaría de mucha utilidad comprobar al comienzo del programa la versión de .NET que esá ejecutando nuestro código. Una primera idea para conseguirlo podría ser cargar el ensamblado MSCorlib.dll y averiguar su versión al igual que se puede hacer con cualquier otro ensamblado propio. Posible pero complicado. La solución es mucho más fácil que todo eso y consiste simplemente en usar el objeto Environment así: Version v = System.Environment.Version; Con esto obtendremos la versión actual de la plataforma dentro de una clase Version. Podemos acceder a cada uno de los números de la versión usando las propiedades Major, Minor, Build y Revision de este objeto (por ejemplo, para ver si estamos usando la versión 1.1 de la plataforma deberemos comprobar que Major y Minor son 1), o la cadena completa con ToString(). La clase Environment tiene alguno... [Más]

Nuevos "Starter Kits" para Visual studio 2005

Nuevos "Starter Kits" para Visual studio 2005
Microsoft ha publicado nuevos Starter Kits (SK). Se trata de proyectos listos para ser usados que incluyen todo el código fuente y documentación y que sirven para ilustrar técnicas de desarrollo sacando partido a las características de Visual Studio. En este caso los nuevos SK son para Visual Studio 2005, e incluyen aplicaciones para Windows y para la Web. En lugar de ponerlos en la página ASP.net, como era habitual, esta vez están directamente en una página dentro de MSDN. En ésta hay enlaces a cómo crear un SK y cómo instalarlos. Dentro de los SK para Windows Forms sólo hay uno. Se trata de un gestor de información sobre películas que utiliza el servicio Web de Amazon.com para buscar entre los títulos disponibles en esta tienda en-línea. Ilustra técnicas como, por supuesto, llamadas a servicios web, enlazado a datos, almacenamiento local usando SQL Server 2005, etc... En lo que se refiere a aplicaciones para la Web hay más variedad, aunque de momento sólo hay 3 nuevos SK. Éstos s... [Más]

Problemas subiendo archivos al servidor con ASP.NET

Problemas subiendo archivos al servidor con ASP.NET
En el anterior artículo sobre este tema, hace unos días, contaba los rudimentos de cómo se suben archivos a un servidor Web mediante HTTP usando sólo ASP.NET, inclyendo también un código de ejemplo sencillo que lo hacía. Entonces prometí que iba a comentar algunas pegas de esta implementación. Se trata de problemas que normalmente no se comentan en los libros ni en la documentación directamente y que pueden volver loco a más de uno si se los encuentra durante un desarrollo. Los que voy a comentar en el post de hoy tienen que ver con la subida al servidor de archivos grandes. - Limitación de seguridad por defecto Una cosa que no se suele contarse es que la subida de archivos al servidor en ASP.NET está limitada por defecto a 4 MB. Si intentamos usar el código de ejemplo del artículo anterior para subir un archivo de más de 4 MB veremos que se produce un error. Se trata de una limitación de seguridad que trae ASP.NET que impide peticiones al servidor mayores de este tamaño (un envío d... [Más]

Subir archivos al servidor usando ASP.NET

Subir archivos al servidor usando ASP.NET
En los tiempos de ASP 3.0 subir archivos al servidor "a pelo", es decir, sin usar controles de terceros para hacerlo era una tarea harto difícil. Se podía conseguir (nosotros en Krasis, por ejemplo, desarrollamos un componente puro ASP que lo hacía perfectamente), pero era muy complicado y no exento de problemas. En ASP.NET esta tarea se ha convertido en algo mucho más sencillo. En realidad no tanto como algunos se piensan (dentro de un momento diré algo más sobre esto), pero desde luego fácil y rápido de implementar para las ocasiones más normales. Para hacerlo basta con usar el control HtmlInputFile del espacio de nombres System.Web.HtmlControls, así: <INPUT id=SelectorDeArchivos type=file runat="server"> Al colocarle el atributo de ejcución en el servidor luego podemos acceder a sus propiedades y métodos una vez enviado el formulario al servidor. Gracias a ello podemos acceder de forma simple a la información sobre el archivo enviado. Sólo hay una propiedad importante e... [Más]

Cómo ordenar los resultados de una vista en SQL Server

Cómo ordenar los resultados de una vista en SQL Server
Las vistas de SQL Server son muy útiles para utilizar consultas complicadas como si se trataran de simples tablas. Entre sus limitaciones, sin embargo, hay una que (a mi por lo menos) me resulta muy irritante: no se pueden ordenar. Es decir no se puede utilizar la cláusula ORDER BY en la sentencia SQL que define la vista. Este truco permite saltarse las normas a la torera y utilizar ordenaciones de todos modos en las vistas. Y es que según la documentación la cláusula TOP de SQL siempre se puede usar con ORDER BY, incluso en las vistas, ya que si no no notendría mucho sentido ¿verdad?. TOP sirve para obtener los 'x' primeros resultados de una consulta. Por ejemplo, si quiero obtener los últimos 1.000 registros de facturas de una tabla puedo escribir: SELECT TOP 1000 * FROM Facturas ORDER BY NumFact DESC Lo que muchas gente no sabe es que TOP admite una sintaxis alternativa que permite especificar un porcentaje de filas a devolver en lugar de un número absoluto. Esta es la cuesti... [Más]

Cómo crear un gestor de errores universal en una aplicación Windows Forms

Cómo crear un gestor de errores universal en una aplicación Windows Forms
Cuando programamos una aplicación, aparte de hacer que ésta cumpla todos los requisitos puramente funcionales e implemente los algoritmos que sean necesarios, es igualmente imortante realizar un estudio sobre las posibles excepciones y errores que se puedan producir durante su ejecución. De este modo podremos responder elegantemente a estas situaciones, en lugar de permitir que nuestros usuarios vean un diálogo horroroso con detalles técnicos y se acabe la aplicación sin previo aviso. Para ello añadimos cantidad de sentencias de gestión de excepciones try-catch-finally en todo el código, gestionando cada posible error o excepción. Por muy bien que lo hagamos, sin embargo, siempre habrá cosas que se nos escapen y que produzcan el fatídico diálogo que mencionaba hace un momento. Para asegurarnos de que esto no ocurre podemos crear un gestor de errores universal que se ejecute de forma automática al producirse alguna excepción que no hemos gestionado adecuadamente. Hacerlo es muy senci... [Más]

Cómo cambiar la resolución de la pantalla mediante código

Cómo cambiar la resolución de la pantalla mediante código
Obtener la resolución actual de la pantalla es algo inmediato si utilizamos el objeto System.screen, ya que su propiedad Bounds nos indica este dato en sus propiedades Width y Height: screen.Bounds.Widthscreen.Bounds.Height Realmente sencillo. Lo que ya es harina de otro costal es hacer que mediante código se cambie la resolución actual de la pantalla. La plataforma .NET no ofrece soporte para esta operación desde ninguna de sus clases pero, como siempre, la API de Windows viene a nuestro rescate. Se trata de un viejo truco de los tiempos de Visual Basic. Necesitamos utilizar las dos funciones siguientes de la biblioteca User32.dll: · EnumDisplaySettings: Ofrece toda la información necesaria sobre las pantallas disponibles en el sistema (puede haber más de una, claro, yo de hecho trabajo con una tarjeta dual que tiene dos monitores enchufados). Su definición es la siguiente (copiada de MSDN): BOOL EnumDisplaySettings( LPCTSTR lpszDeviceName, // display device DWORD iMode... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico