viernes, mayo 18, 2007

Capturar la salida de una aplicacion de consola

Se puede ejecutar una aplicación de consola por código y capturar su salida, para ello basta con redireccionar el StandarOutput a un TextReader...

Ejemplo:

ProcessStartInfo pi = new ProcessStartInfo("cmd.exe", "/c dir");

pi.WindowStyle = ProcessWindowStyle.Hidden;

pi.RedirectStandardOutput = true;

pi.UseShellExecute = false;

Process p = Process.Start(pi);

p.WaitForExit();

p.Start();

TextReader t = p.StandardOutput;

MessageBox.Show(t.ReadToEnd());



Etiquetas: ,

jueves, mayo 17, 2007

Propiedades de proyectos de Setup

Se pueden definir algunos de los parámetros de instalación de una aplicación desde la pagina de propiedades del proyecto de setup.

Teniendo seleccionado el proyecto, en las properties (F4) se puede escoger el nombre que mostrará el wizard ("Welcome to the XXX setup wizard") por medio de la property "ProductName"
El directorio en donde se alojarán los assemblies dentro de ProgramFiles está definido por la property "Manufacturer"

Si se quiere eliminar la interacción con el usuario (el wizard) se pueden eliminar todos los diálogos desde el User Interface Editor y el msi se instalará automaticamente con las opciones por default

Etiquetas: ,

jueves, mayo 03, 2007

Cache de objetos con Dispose

En el caso en que sea necesario poner en Cache objetos que tienen definido Dispose, hay que tener en cuenta que cuando el Cache remueve el objeto NO llama al Dispose, con lo que se pueden desperdiciar recursos.
La solución es utilizar el callback del objeto Cache e implementar la llamada a mano.

// add the item to the cache, note the callback

HttpRuntime.Cache.Add("myKey", myClass, null, DateTime.Now.AddSeconds(5),
Cache.NoSlidingExpiration, CacheItemPriority.Default,
new CacheItemRemovedCallback( OnRemoved ) );

// callback function

void OnRemoved( string key, object value, CacheItemRemovedReason reason ) {

IDisposable disposable = value as IDisposable;
if (disposable != null) {
disposable.Dispose();
}
}

Etiquetas: ,